You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CMake自定义构建、运行及清理命令实现方法咨询

实现CMake自定义构建与清理目标

嘿,作为CMake新手,你的需求完全可行!CMake提供了add_custom_target命令,专门用来创建这类自定义的构建/操作目标,完美替代你想要的Makefile风格make all/make clean功能。下面一步步给你拆解实现:

1. 构建并运行项目的自定义目标

假设你已经用add_executable定义了项目的可执行文件目标(比如叫my_project),我们可以创建一个run目标,让它自动完成构建可执行文件 → 运行程序的流程:

# 先定义你的可执行目标(根据你的实际项目调整文件名和源文件)
add_executable(my_project src/main.cpp)

# 创建自定义run目标
add_custom_target(run
    COMMAND ./my_project  # 运行生成的可执行文件
    DEPENDS my_project    # 依赖:必须先完成my_project的构建才能运行
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}  # 指定在构建目录下执行命令
    COMMENT "Building and running the project..."
)

使用方式

在你的构建目录(比如build/)下,执行:

make run  # 如果用Makefile生成器
# 或者如果你用Ninja的话:
ninja run

这条命令会先自动构建你的项目(如果有代码变更),然后立刻运行生成的可执行文件,完全替代你手动敲cmake .. && make && ./project_name的流程。

2. 清空构建目录的自定义清理目标

CMake自带的make clean只会删除编译生成的二进制文件、中间产物,但不会删除CMake自动生成的配置文件(比如CMakeCache.txtMakefile本身)。如果你想要完全清空构建目录(类似rm -rf *的效果),可以创建一个distclean目标:

add_custom_target(distclean
    COMMAND rm -rf *  # 清空当前目录下所有内容
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}  # 指定在构建目录执行
    COMMENT "Cleaning the entire build directory..."
)

使用方式

在构建目录下执行:

make distclean
# 或者
ninja distclean

执行后你的构建目录会被完全清空,回到和刚创建时一样的状态,方便重新从头构建。

额外小贴士

  • 如果你的项目有多个可执行目标,记得在DEPENDS里指定正确的目标名称,确保run目标只会构建并运行你需要的那个程序。
  • 如果你用的是Windows平台,rm -rf *要换成对应的PowerShell命令:Remove-Item * -Recurse -Force,可以通过CMake的条件判断来适配不同系统:
    if(UNIX)
        set(CLEAN_COMMAND rm -rf *)
    else()
        set(CLEAN_COMMAND Remove-Item * -Recurse -Force)
    endif()
    
    add_custom_target(distclean
        COMMAND ${CLEAN_COMMAND}
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
        COMMENT "Cleaning the entire build directory..."
    )
    

内容的提问来源于stack exchange,提问作者Roy Carter

火山引擎 最新活动