我的问题与CMake : Changing name of Visual Studio and Xcode exectuables depending on configuration in a project generated by CMake非常相似。在该帖子中,输出文件名将根据项目配置(Debug,Release等)进行更改。我想走得更远。当我知道项目的配置时,我想告诉可执行程序根据项目配置链接不同的库名。我想知道CMake中是否有一个可以告诉项目配置的变量。如果存在这样的变量,我的任务将变得更容易:
if (Project_Configure_Name STREQUAL "Debug")
#do some thing
elseif (Project_Configure_Name STREQUAL "Release")
#do some thing
endif()
答案 0 :(得分:8)
根据http://cmake.org/cmake/help/v2.8.8/cmake.html#command:target_link_libraries,您可以根据配置指定库,例如:
target_link_libraries(mytarget
debug mydebuglibrary
optimized myreleaselibrary
)
请注意,optimized
模式意味着每个非调试的配置。
以下是一个更复杂但更可控的解决方案:
假设您要链接到导入的库(未在cmake项目中编译),可以使用以下命令添加它:
add_library(foo STATIC IMPORTED)
set_property(TARGET foo PROPERTY IMPORTED_LOCATION_RELEASE c:/path/to/foo.lib)
set_property(TARGET foo PROPERTY IMPORTED_LOCATION_DEBUG c:/path/to/foo_d.lib)
add_executable(myexe src1.c src2.c)
target_link_libraries(myexe foo)
有关详细信息,请参阅http://www.cmake.org/Wiki/CMake/Tutorials/Exporting_and_Importing_Targets。
答案 1 :(得分:0)
总有另一种方式:
if(CMAKE_BUILD_TYPE MATCHES "release")
SET(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE})
else(CMAKE_BUILD_TYPE MATCHES "debug")
SET(CMAKE_BUILD_TYPE "debug")
endif(CMAKE_BUILD_TYPE MATCHES "release")
我们可以使用变量CMAKE_BUILD_TYPE。我们也可以在调用CMAKE开始时更改此变量:
cmake .. -DCMAKE_BUILD_TYPE:STRING=debug
然后我们可以使用此变量作为构建配置的指示器。