CMake 根据配置从生成中排除文件

CMake exclude file from build according to configuration

本文关键字:排除 文件 配置 CMake      更新时间:2023-10-16

我正在将现有的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>)

但我在生成步骤中以 CMake 错误结束:

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

我仍然可以用大#ifdef _DEBUG包装我的"在发布模式下排除我"文件的内容,但我实际上正在寻找任何不会让我修改原始项目中的源文件的解决方案。

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

有好的一天!

您可以为有条件包含的源创建单独的静态库。然后可以通过 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)

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