在我的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文件)。我的配置有问题吗?
答案 0 :(得分:1)
add_custom_command
的{{3}}选项不能保证将生成的文件放在此处;它只是告诉CMake,预期将生成的文件放置在此处。您的python脚本很可能在相对路径下生成文件,因此它们只是被放置在CMake binary 目录(您的构建文件夹)中的某个位置。因此,虽然可以正确生成文件,但是自定义目标在CMAKE_CURRENT_SOURCE_DIR
中看不到它们。因此,自定义目标将始终触发自定义命令以重新运行。
默认情况下,CMake从add_custom_command
运行CMAKE_CURRENT_BINARY_DIR
,但是您可以通过添加CMAKE_CURRENT_SOURCE_DIR
选项将其更改为从WORKING_DIRECTORY
运行。这样,生成的文件将放置在 expected 位置,并实现您想要的行为。尝试这样的事情:
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)
答案 1 :(得分:0)
您可以尝试在配置时(即在调用cmake
时)生成文件。这样,它将仅创建一次。
您可以删除add_custom_command
并使用execute_process
创建文件。