2014-12-03 65 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

相关问题