文件从构建中排除(自定义和瞬态)

时间:2016-10-06 08:32:02

标签: c++ visual-studio-2015 cmake googletest

我的Google Test解决方案中有很多C ++(Visual Studio)源文件,我希望有可能只为构建保留一些(关注问题),还要回到初始配置的速度足够快(每天两次)。

我们或多或少地使用了三种解决方案:Visual StudioCMakeQT(但我可以添加另一种解决方案)。我从未使用QT,所以我看到的其他两个解决方案是:

  • Visual Studio:文件夹无用,但我可以选择文件并将其从构建中排除。但是这些更改都保存在vcproj中,所以我必须注意不要将它们保存在版本控制上,这很烦人。
  • CMake:轻松更改CMakeLists.txt(带有来源文件夹的注释行),但我总是遇到版本控制问题...也许我可以在自定义(用户)中配置排除的文件文件。优点:我只能生成我想要的东西,更灵活,不像前一个那么无聊。

例如,如果我不想要src_2中的源:

file(GLOB_RECURSE SRC_FILES_1
${SOURCE_BASE_DIR}/src_1/*.cpp
${SOURCE_BASE_DIR}/src_1/*.h
)

file(GLOB_RECURSE SRC_FILES_2
${SOURCE_BASE_DIR}/src_2/*.cpp
${SOURCE_BASE_DIR}/src_2/*.h
)

file(GLOB_RECURSE SRC_FILES_3
${SOURCE_BASE_DIR}/src_3/*.cpp
${SOURCE_BASE_DIR}/src_3/*.h
)

add_executable(${PROJECT_TEST_NAME}
${SRC_FILES_1}
# next line is commented
# ${SRC_FILES_2}
${SRC_FILES_3}
)

是否有另一种解决方案或方法来改善其中一种提议?

1 个答案:

答案 0 :(得分:1)

您可以使用cmake变量来控制它。

option(BUILD_TESTS "builds test cpp files" ON)

这会为您的cmake文件添加一个选项。在这种情况下默认为ON,但您可以更改它。现在让我们继续:

if(BUILD_TESTS)
    set(TEST_CPP_FILES test1.cpp test2.cpp)
endif(BUILD_TESTS)

add_executabe(foo bar.cpp bar1.cpp $(TEST_CPP_FILES))

在这里,您可以使用测试的源文件(或BUILD_TESTSON时要构建的任何源文件)定义变量。然后将这些变量添加到目标。如果{{1关闭此变量将为空。

现在更改您可以运行的值

BUILD_TESTS

如果您想再次打开它们,请使用cmake <...> -DBUILD_TESTS=OFF 。您还可以保留版本控制中的更改,因为它将默认为ON,您需要明确禁用它。

如果你不只是想排除源文件,你也可以在if语句中排除整个子目录或目标。

修改

对于您的示例,它可能如下所示:

ON
之后

if(BUILD_TESTS) file(GLOB_RECURSE SRC_FILES_2 ${SOURCE_BASE_DIR}/src_2/*.cpp ${SOURCE_BASE_DIR}/src_2/*.h ) endif(BUILD_TESTS) 应为空。