2014-12-03 47 views
0

我試圖使用cmake來構建libpng。爲此,zlib的一個變量include目錄和zlib庫被傳遞給cmake。像這樣:cmake - 用於發佈和調試的不同庫(zlib/libpng)

cmake .. -DZLIB_LIBRARY=../../zlib-1.2.8/build/$(Configuration)/zlib.lib -DZLIB_INCLUDE_DIR=../../zlib-1.2.8/ 

它在發佈版本中完美工作 - 但不在調試版本中。它幾乎可以工作 - 我將在MS VS中使用的$(Configuration)路徑中使用$(Configuration),這取決於配置,可以是「Debug」或「Release」。但問題是,zlib在調試&發佈模式中使用不同的文件名。像:

zlib.lib ZLIB.DLL(釋放)

zlibd.lib zlibd.dll(調試)

如果我使用上面的命令,它會搜索庫:

../../zlib-1.2.8/build/Release/zlib.lib(發佈 - >作品)

../../zlib-1.2.8/build/Debug/zlib.lib (調試 - >不工作,因爲文件名是zlibd.lib)

任何想法如何我可以完成不同的庫名取決於cmake的配置(我不想在生成的VS項目中更改它)?

回答

3

使用optimizeddebug指令這樣

SET(LIBZ_LIB optimized ${PROJECT_SOURCE_DIR}/zlib.lib 
      debug ${PROJECT_SOURCE_DIR}/zlibd.lib) 

target_link_libraries(your-app ... ${LIBZ_LIB} 

當然你必須的路徑固定的庫文件。

+0

在這裏我要提出發生器表達式,但看看,CMake比這更聰明。更多的信息可以在這裏找到:http://www.cmake.org/cmake/help/v3.0/command/target_link_libraries.html – IdeaHat 2014-12-03 14:30:50

+0

@IdeaHat這也適用,但我覺得這是更乾淨:) – ismail 2014-12-03 15:25:57

相關問題