在CMake中基于每个配置包含源文件

时间:2011-10-05 20:17:48

标签: cmake

在我特定的CMake项目中,我有三个CPP文件:

a.cpp
b.cpp
c.cpp

我希望在所有配置(发布和调试)中编译'a.cpp' 我只想在DEBUG配置中编译'b.cpp' 我只想在RELEASE配置中编译'c.cpp'。

我该怎么做?我需要类似于debug CMake操作接受的optimizedtarget_link_libraries()个关键字。

2 个答案:

答案 0 :(得分:1)

据我所知,cmake没有提供基于配置排除某些文件的方法。因此,您需要一种解决方法来实现此行为。

例如,您可以使用一些保护宏来包装b.cppc.cpp的整个内容:

#ifdef BUILD_ME
//original content of your file
#endif

和下一步在cmake中设置特定于配置的编译器定义:

if (${CMAKE_GENERATOR} MATCHES "Make" AND "${CMAKE_BUILD_TYPE}" STREQUAL "")
    # This block might be needed because CMAKE_BUILD_TYPE is usually
    # undefined for makefiles.
    # And COMPILE_DEFINITIONS_RELEASE are not chosen by default.
    set(CMAKE_BUILD_TYPE RELEASE)
endif()

set_source_files_properties(b.cpp PROPERTIES COMPILE_DEFINITIONS_DEBUG BUILD_ME )
set_source_files_properties(c.cpp PROPERTIES COMPILE_DEFINITIONS_RELEASE BUILD_ME )
add_executable(target_name a.cpp b.cpp c.cpp)

答案 1 :(得分:0)

此问题已在 3.17 中修复: https://cmake.org/cmake/help/latest/release/3.17.html#generators

“Visual Studio 生成器学会了支持每个配置源。以前只有命令行构建工具生成器支持它们。”