【问题标题】:Improving cleaning of CMake build directory改进 CMake 构建目录的清理
【发布时间】:2013-04-21 09:48:09
【问题描述】:

我正在尝试找出一种方法来配置我的 CMake 构建以包含一个“干净”目标,该目标将删除构建目录中的所有文件,但名为“modules”的子目录中的文件除外。

为什么,你可能会问?好吧,我们的代码库目前是基于 makefile 的,我正在将其切换到 cmake。我当前的设置是在顶层添加一个 cmake/ 目录,其中包括 modules/ 子文件夹中所需的宏。然后人们可以从 cmake/ 目录运行“cmake ..”。

通常,当我在 CMakeLists.txt 中进行更改时,我想绝对确定我以前的 cmake 运行都不会产生影响,因此最好从 cmake/ 目录中从头开始。我不能只 rm -rf ./ 因为有所需的 modules/ 目录。如果可能的话,我想要一种简单的“cmake clean”方式来恢复它。

感谢您的任何意见。

【问题讨论】:

  • 我会将您的 /cmake/modules 文件视为源代码树的一部分,并将创建一个单独的空“构建”目录 - 在项目的根目录中或留给用户创建根外。这样一来,您的源代码就不会与构建文件混淆。
  • 是的,你完全正确。也许这只是个人喜好,或者来自源代码内 makefile 的遗留思想过程,但我喜欢在 cmake/ 目录中完成所有操作的想法,即使它包含源代码控制的 modules/ 目录。

标签: build cmake organization


【解决方案1】:

我已经在我的一些代码中做到了这一点。在我的CMakeLists.txt 底部添加一行

# Add a distclean target to the Makefile
ADD_CUSTOM_TARGET(distclean COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/distclean.cmake)

然后我在我的顶级目录中添加一个名为distclean.cmake 的文件。此文件包含我要删除的文件的循环:

# Loop over the directories/files and delete each one
FOREACH(D ${DEL}) # DEL is a list of the directories and files to delete
    IF(EXISTS ${D})
        FILE(REMOVE_RECURSE ${D})
    ENDIF()
ENDFOREACH()

你可以看看我完整的distclean.cmake文件here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 2013-09-20
    • 2016-08-02
    • 1970-01-01
    • 2018-05-09
    相关资源
    最近更新 更多