我正在嘗試爲使用libpng的應用程序創建一個CMake層次結構。 Libpng需要zlib。cmake層次結構zlib,libpng和我自己的應用程序
由於的CMakeLists.txt分佈既zlib的和libpng我的第一個想法是使以下結構:
/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?-
......然後,在頂級的CMakeLists.txt,將像:
project(everything)
...
add_subdirectory(zlib-1.2.5)
add_subdirectory(libpng154)
add_subdirectory(myapp)
...
但沒有運氣。 libpng的CMakeLists.txt執行find_package(ZLIB ...),但它不知道在哪裏尋找。通過將zlib「安裝」到/ usr,可以在Mac OS上解決這個問題。但這在Windows中不起作用。
所以,然後我想我不會遞歸到子目錄。只需編譯並構建獨立的zlib和libpng,並在遍歷到我自己的應用程序之前執行find_package(PNG ...) (單獨編譯和構建zlib和libpng(通過提供的CMakeLists.txt)作品,至少在Mac OS但是,只是因爲zlib安裝到/ usr)。
project(everything)
...
find_package(PNG...)
add_subdirectory(myapp)
...
不幸的是,find_package(PNG ...)失敗。我不知道如何讓find_package(PNG ...)知道在哪裏尋找我剛剛構建的libpng庫。例如對於boost,你可以設置「BOOST_ROOT」變量。有什麼與libpng相似的嗎?
親切的問候,
丹尼爾·德克斯
通常,如果find_package失敗,您可以編輯CMakeCache文件並在其中輸入include和library路徑。如果您使用CMake的GUI,這是最簡單的。 – LiMuBei