根据配置,CMake从构建中排除文件

时间:2017-09-07 17:43:19

标签: c++ cmake

我正在将现有的C ++项目迁移到CMake。 在此项目中,某些源文件在Visual Studio常规配置属性中仅在发布模式中标记为Excluded from Build

我尝试使用CMakeLists.txt找到一种方法来重现此行为。到目前为止,我已尝试将target_sources()与生成器表达式一起使用:

set(_srcs Doctor.cpp Clara.cpp)
set(_headers Doctor.hpp Clara.hpp)

add_library(Tardis SHARED ${_srcs} ${_headers})

target_sources(Tardis PRIVATE $<$<CONFIG:Debug>:Dalek.cpp>)

但是我在Generate步骤中以CMake错误结束:

Target "Tardis" has source files which vary by configuration.  This is not supported by the "Visual Studio 14 2015 Win64" generator.

我仍然可以使用大#ifdef _DEBUG包装我的 exclude-me-in-release-mode 文件的内容,但我实际上正在寻找任何不会让我失望的解决方案从原始项目修改我的源文件。

我使用CMake 3.8,最低要求是3.7。

度过美好的一天!

1 个答案:

答案 0 :(得分:2)

您可以为条件包含的源创建单独的静态库。然后可以通过target_link_libraries命令根据配置链接库,例如:

add_library(TardisDebugOnlyHelper STATIC ${_debug_only_srcs} ${_debug_only_headers})
add_library(Tardis SHARED ${_srcs} ${_headers})
target_link_libraries(Tardis debug TardisDebugOnlyHelper)

(免责声明:我还没有测试过)