c++ - 从构建中排除文件(自定义和临时)

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

我的 Visual Studio 解决方案中有很多 C++ (Google Test) 源文件,我希望只保留一些用于构建(集中在这个问题上),而且要足够快地(一天两次)返回到初始配置。

我们或多或少地使用了大约三个解决方案: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}
)

是否有其他解决方案或方法来改进这里提出的其中一个?

最佳答案

您可以使用 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 时要构建的任何源文件)定义一个变量。然后将这些添加到目标。如果 BUILD_TESTS 关闭,此变量将为空。

现在更改您可以运行的值

cmake <...>  -DBUILD_TESTS=OFF

或者使用 ON 如果你想再次打开它们。您还可以保留版本控制中的更改,因为它将默认为 ON 并且您需要明确禁用它。

如果您不只是想排除源文件,您还可以在 if 语句中使用此排除整个子目录或目标。

编辑:

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

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

SRC_FILES_2 之后应该为空。

关于c++ - 从构建中排除文件(自定义和临时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39891250/

相关文章:

C++ glfw macosx dim screen vs f1 收藏

c++ - 如何在 C++ 中编写整数和平凡类型之间的双向映射?

c++11 - 指定 CMAKE_CXX_STANDARD 时如何控制调用的编译器标志?

具有多个子项目的 CMake 顶级项目创建包

windows - 如何在 Windows 的 CMake 中将多个静态库捆绑到单个库中

c++ - 如何使用折叠表达式实例化可变参数模板函数中的每种类型?

c++ - 如何释放绑定(bind)参数 boost::signals2::signal 保留的引用?

visual-studio-2015 - 当 gulp 任务失败时 msbuild 失败

c++ - CMake 找不到 Visual C++ 编译器

c++ - Qt5.9.1 和 Visual Studio 2015 添加 Qt WebEngine 模块