Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2008 CMake:如何排除给定构建配置的目录?_Visual Studio 2008_Cmake - Fatal编程技术网

Visual studio 2008 CMake:如何排除给定构建配置的目录?

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

我有一个在VisualStudio2008下使用CMake配置的项目。对于这个项目,我有三种构建配置:“调试”、“发布”、“测试”。所有的C++文件根据它们的功能(模型、视图、控制器、……)在几个目录中被分离。一个目录称为“test”,其中包含仅用于配置“test”的文件


因此,如果配置为“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的配置。但我会看看你的建议是否可行。谢谢