4

我的问题与 CMake 非常相似:根据 CMake 生成的项目中的配置更改 Visual Studio 和 Xcode 可执行文件的名称。在那篇文章中,输出文件名将根据项目配置(调试、发布等)而改变。我想更进一步。当我知道项目的配置时,我想告诉可执行程序根据项目配置链接不同的库名称。我想知道 CMake 中是否有一个变量可以告诉项目配置。如果存在这样的变量,我的任务将变得更容易:

if (Project_Configure_Name STREQUAL "Debug")
   #do some thing
elseif (Project_Configure_Name STREQUAL "Release")
   #do some thing
endif()
4

2 回答 2

9

根据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 。

于 2013-06-12T16:31:19.053 回答
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

然后我们可以使用这个变量作为构建配置的指标。

于 2013-06-13T09:07:50.620 回答