Visual studio 2008 CMake:如何排除给定构建配置的目录?
我有一个在VisualStudio2008下使用CMake配置的项目。对于这个项目,我有三种构建配置:“调试”、“发布”、“测试”。所有的C++文件根据它们的功能(模型、视图、控制器、……)在几个目录中被分离。一个目录称为“test”,其中包含仅用于配置“test”的文件Visual studio 2008 CMake:如何排除给定构建配置的目录?,visual-studio-2008,cmake,Visual Studio 2008,Cmake,我有一个在VisualStudio2008下使用CMake配置的项目。对于这个项目,我有三种构建配置:“调试”、“发布”、“测试”。所有的C++文件根据它们的功能(模型、视图、控制器、……)在几个目录中被分离。一个目录称为“test”,其中包含仅用于配置“test”的文件 因此,如果配置为“test”,我必须使用CMake编译所有目录中的文件,但如果配置为“debug”或“release”,则排除目录“test”。不幸的是,由于缺少控制Visual Studio的“exclude from Bu
因此,如果配置为“test”,我必须使用CMake编译所有目录中的文件,但如果配置为“debug”或“release”,则排除目录“test”。不幸的是,由于缺少控制Visual Studio的“exclude from Build”的属性,目前无法做到这一点特色。有CMake的,但这对于您的场景来说可能太粗糙了 在CMake邮件列表中,有人试图实现这一点,但这肯定不是一个很好的解决方案 最简单的方法可能是对测试源使用预处理器保护,并且只为“测试”概要文件定义相应的预处理器标志。在您的CmakeList中:
set_property( DIRECTORY test
APPEND PROPERTY COMPILE_DEFINITIONS_TEST DO_THE_TESTS
)
在每个源文件中:
#ifdef DO_THE_TESTS
...
#endif
通常,“测试”是一个或多个目标,而不是构建配置
我猜您的测试配置复制了调试或发布中的大部分设置,这意味着您要么在测试发布代码(从而失去有效调试的能力),要么在测试调试代码(这意味着您没有真正测试计划发布的代码)
如果“测试”是CMake目标,您可以在调试或发布模式下构建并运行它。要做到这一点,我想应该是这样的:
SET(all_files_in_test_dir ...)
ADD_EXECUTABLE(TestAll ${all_files_in_test_dir})
TARGET_LINK_LIBRARIES(TestAll ModelLib ViewLib ControllerLib ...)
这假设由模型、视图和控制器组成的目标是先前使用ADD_LIBRARY(ModelLib…)
等添加的lib
如果您这样做,另一个好处是,仅使用两种配置类型,您在构建项目方面花费的时间就应该更少
如果你真的想把“测试”作为一种配置类型,那么我认为ComicSanss的答案是正确的。你是否尝试过用
add\u子目录(test)
包装If(CMAKE\u BUILD\u type STREQUAL“test”)
?@arrowdoger。打开CMAKE_BUILD_类型是个好主意。不幸的是,对于多配置生成器,cmake并没有真正使用此生成器(除非在cmake的命令行中明确指定)。您的意思是有三个配置而不是目标?CMake中的目标是通过ADD_library
,ADD_EXECUTABLE
等添加的库或exe。弗雷泽是的,事实上这是“配置”黑客正是我要避免的。我现在正在用,但我不喜欢。此外,我的项目中定义的结构应该成为一种公司方法。嗨。我需要将“测试”视为VisualStudio的配置。但我会看看你的建议是否可行。谢谢