gpt4 book ai didi

CMake add_custom_command 未运行

转载 作者:行者123 更新时间:2023-12-02 23:35:21 25 4
gpt4 key购买 nike

我正在尝试使用 add_custom_command在构建期间生成文件。该命令似乎从未运行过,所以我制作了这个测试文件。

cmake_minimum_required( VERSION 2.6 )

add_custom_command(
OUTPUT hello.txt
COMMAND touch hello.txt
DEPENDS hello.txt
)

我尝试运行:

cmake .  
make

并且 hello.txt 没有生成。我做错了什么?

最佳答案

当您只有一个正在构建的目标时,add_custom_target(run ALL ...) 解决方案适用于简单情况,但当您有多个顶级目标(例如应用程序和测试)时,该解决方案就会崩溃.

当我尝试将一些测试数据文件打包到目标文件中时,我遇到了同样的问题,这样我的单元测试就不会依赖于任何外部内容。我使用 add_custom_command 解决了这个问题,并使用 set_property 进行了一些额外的依赖魔术。

add_custom_command(
OUTPUT testData.cpp
COMMAND reswrap
ARGS testData.src > testData.cpp
DEPENDS testData.src
)
set_property(SOURCE unit-tests.cpp APPEND PROPERTY OBJECT_DEPENDS testData.cpp)

add_executable(app main.cpp)
add_executable(tests unit-tests.cpp)

所以现在 testData.cpp 将在编译 unit-tests.cpp 之前生成,并且任何时候 testData.src 发生变化。如果您调用的命令非常慢,您会得到额外的好处,即当您仅构建应用程序目标时,您不必等待该命令(只有测试可执行文件需要)完成。

上面没有显示,但仔细应用 ${PROJECT_BINARY_DIR}、${PROJECT_SOURCE_DIR} 和 include_directories() 将使源树中没有生成的文件。

关于CMake add_custom_command 未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2937128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com