Próbuję utworzyć hierarchię CMake dla aplikacji korzystającej z libpng. Libpng wymaga zlib.hierarchia cmle zlib, libpng i moja własna aplikacja
Ponieważ CMakeLists.txt jest rozprowadzany zarówno zlib i libpng mój pierwszy pomysł był aby następującą strukturę:
/development
CMakeLists.txt
/zlib-1.2.5
CMakeLists.txt <- provided by zlib
-sources-
-build of zlib?-
/libpng154
CMakeLists.txt <- provided by libpng
-sources-
-build of libpng?-
/myapp
CMakeLists.txt
-sources-
/build
-build of myapp-
-build of zlib?-
-build of libpng?-
... a potem, na najwyższym poziomie CMakeLists.txt umieścić coś takiego :
project(everything)
...
add_subdirectory(zlib-1.2.5)
add_subdirectory(libpng154)
add_subdirectory(myapp)
...
Ale bez powodzenia. CMakeLists.txt z libpng wykonuje find_package (ZLIB ...), ale nie wie, gdzie szukać. Można to rozwiązać w systemie Mac OS przez "zainstalowanie" zlib na/usr. Ale to nie działa w systemie Windows.
Tak więc pomyślałem, że nie powróciłbym do podkatalogów. Po prostu kompiluj i kompiluj zlib i libpng niezależnie i zrób plik find_package (PNG ...) przed przejściem do mojej własnej aplikacji (kompilowanie i budowanie pojedynczych i libli przy pomocy dostarczonego CMakeLists.txt) działa, przynajmniej na Mac OS ale znowu, tylko dlatego, że zlib jest zainstalowany na/usr).
project(everything)
...
find_package(PNG...)
add_subdirectory(myapp)
...
No szczęście, find_package (PNG ...) nie powiedzie się. Nie mam pojęcia, jak pozwolić find_package (PNG ...) wiedzieć, gdzie szukać biblioteki libpng, którą właśnie zbudowałem. Na przykład dla boost, możesz ustawić zmienną "BOOST_ROOT". Czy istnieje coś podobnego do libpng?
poważaniem
Daniel Dekkers
Zwykle, jeśli pakiet find_package nie powiedzie się, można edytować plik CMakeCache i wprowadzić tam ścieżki włączenia i biblioteki. To najłatwiejsze, jeśli używasz GUI dla CMake. – LiMuBei