我在使用CMake配置的Visual Studio 2008下有一个项目。对于这个项目,我有三个构建配置:“debug”,“release”,“test”。我的所有C ++文件根据其功能(Model,View,Controller,...)分成几个目录。一个目录称为“test”,包含仅用于配置“test”的文件。
因此,我与CMake的关系是编译所有目录中的文件(如果配置为“test”),但如果配置为“debug”或“release”,则排除目录“test”。
答案 0 :(得分:1)
不幸的是,目前这是不可能的,因为缺少控制Visual Studio的“从构建中排除”功能的属性。有CMake的EXCLUDE_FROM_ALL,但这可能对你的场景来说太粗糙了。
CMake邮件列表上有a hack试图实现这一点,但这当然不是一个很好的解决方案。
最简单的方法可能是为测试源使用预处理器保护,并仅为“测试”配置文件定义相应的预处理器标志。在您的CMakeLists中:
set_property( DIRECTORY test
APPEND PROPERTY COMPILE_DEFINITIONS_TEST DO_THE_TESTS
)
在每个源文件中:
#ifdef DO_THE_TESTS
...
#endif
答案 1 :(得分:1)
通常情况下,“测试”将是目标或目标,而不是构建配置。
我想你的测试配置会从Debug或Release中复制大部分设置,这意味着你要么测试发布代码(因此失去了有效调试的能力),要么测试调试代码(这意味着你不是真的测试您计划发布的代码。
如果“tests”是CMake目标,您可以在Debug 或 Release模式下构建和运行它。要做到这一点,我想它会是这样的:
SET(all_files_in_test_dir ...)
ADD_EXECUTABLE(TestAll ${all_files_in_test_dir})
TARGET_LINK_LIBRARIES(TestAll ModelLib ViewLib ControllerLib ...)
这假设包含模型,视图和控制器的目标是您之前使用ADD_LIBRARY(ModelLib ...)
等添加的库。
如果你这样做,另一个好处是只有两种配置类型,你应该花更少的时间来构建项目。
如果您真的做想要将“测试”作为配置类型,那么我认为ComicSansMS的回答是可行的。