【问题标题】:cmake dependencycmake依赖
【发布时间】:2025-12-15 19:25:01
【问题描述】:

我正在尝试创建一个等效于以下 make 的 cmake:

demo: main.cpp
   gcc -o demo main.cpp
   ./demo

只要创建了演示,就会执行演示。

这是我来的,但演示没有按我的意愿执行:

add_executable(demo main.cpp)
add_custom_target(run_demo demo)

这实际上等价于:

all: demo
demo: main.cpp
   gcc -o demo main.cpp
run_demo:demo

我错过了什么?

【问题讨论】:

    标签: gcc compilation cmake


    【解决方案1】:

    我不完全确定您想要什么,因为您发布的 Makefile sn-ps 并没有按照您所说的那样做。但是从对 Kleist 答案的评论来看,您希望演示在每次重新编译时都运行。您可以通过以下方式实现:

    add_executable(demo main.cpp)
    add_custom_command(TARGET demo
                       POST_BUILD COMMAND ${CMAKE_CURRENT_BINARY_DIR}/demo)
    

    【讨论】:

    • 谢谢,我已经解决了我的问题
    • 这个命令对于多个配置生成器来说不是很健壮,更喜欢使用:POST_BUILD COMMAND demo。 > 如果 COMMAND 指定可执行目标名称(由add_executable() 命令创建),它将自动替换为构建时创建的可执行文件的位置。来源:cmake.org/cmake/help/latest/command/add_custom_command.html
    【解决方案2】:

    您需要将run_demo添加到ALL目标:

    add_custom_target(run_demo ALL demo)
    

    【讨论】:

    • 这将执行每个调用的演示,虽然这不是我想要的