gpt4 book ai didi

CMake 自定义命令始终执行

转载 作者:行者123 更新时间:2023-12-05 05:07:36 25 4
gpt4 key购买 nike

在我的 CMakeLists.txt 中,我定义了一个自定义目标和命令:

add_custom_command(
OUTPUT
${CMAKE_CURRENT_SOURCE_DIR}/input.csv
${CMAKE_CURRENT_SOURCE_DIR}/output1.csv
${CMAKE_CURRENT_SOURCE_DIR}/output2.csv
COMMAND python3
${CMAKE_CURRENT_SOURCE_DIR}/tests/genVectors.py)

add_custom_target(TEST_VECTORS
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/input.csv
${CMAKE_CURRENT_SOURCE_DIR}/output1.csv
${CMAKE_CURRENT_SOURCE_DIR}/output2.csv)

add_executable(VectorTest tests/VectorTest.cpp)
add_dependencies(VectorTest TEST_VECTORS)

它总是生成新的 CSV 文件,即使这些文件存在。如果矢量不存在,我只需要生成矢量(使用 genVectors.py python 文件)。是我的配置有问题吗?

最佳答案

OUTPUT add_custom_command 选项不保证生成的文件放在这里;它只是告诉 CMake 生成的文件应该放在那里。您的 python 脚本可能会在相对路径中生成文件,因此它们只是被放置在您的 CMake binary 目录(您的构建文件夹)中的某个位置。因此,虽然您的文件可能已正确生成,但您的自定义目标看不到它们,因为它正在 CMAKE_CURRENT_SOURCE_DIR 中查找。因此,自定义目标将始终触发自定义命令重新运行。

CMake 默认从 CMAKE_CURRENT_BINARY_DIR 运行 add_custom_command,但您可以通过添加 WORKING_DIRECTORY< 将其更改为从 CMAKE_CURRENT_SOURCE_DIR 运行 选项。这样,生成的文件将放置在预期 位置,并实现您想要的行为。尝试这样的事情:

add_custom_command(
OUTPUT
${CMAKE_CURRENT_SOURCE_DIR}/input.csv
${CMAKE_CURRENT_SOURCE_DIR}/output1.csv
${CMAKE_CURRENT_SOURCE_DIR}/output2.csv
COMMAND python3
${CMAKE_CURRENT_SOURCE_DIR}/tests/genVectors.py
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

add_custom_target(TEST_VECTORS
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/input.csv
${CMAKE_CURRENT_SOURCE_DIR}/output1.csv
${CMAKE_CURRENT_SOURCE_DIR}/output2.csv)

add_executable(VectorTest tests/VectorTest.cpp)
add_dependencies(VectorTest TEST_VECTORS)

关于CMake 自定义命令始终执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58994210/

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