我想从 test_runner.cpp 中创建一个可执行文件:
add_executable(myexe ${CMAKE_CURRENT_BINARY_DIR}/test_runner.cpp)
但这个特定的 cpp 文件本身是在预构建命令中自动生成的:
add_custom_command(
TARGET myexe PRE_BUILD
COMMAND deps/cxxtest-4.4/bin/cxxtestgen --error-printer -o "${CMAKE_CURRENT_BINARY_DIR}/test_runner.cpp" src/My_test_suite.h
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
但现在我无法生成新的 cmake 构建文件,因为它抱怨缺少源代码,而在预构建之前确实缺少源代码。
问题的关键在于应用GENERATED财产 http://www.cmake.org/cmake/help/v3.3/prop_sf/GENERATED.html到“test_runner.cpp”。这告诉 CMake 不要在配置时检查它的存在,因为它是作为构建过程的一部分创建的。
您可以手动应用此属性(例如使用set_source_files_properties
)。然而,处理这个问题的正确方法是使用另一种形式add_custom_command http://www.cmake.org/cmake/help/v3.3/command/add_custom_command.html, i.e. add_custom_command(OUTPUT ...)
而不是add_custom_command(TARGET ...)
.
如果您指定“test_runner.cpp”作为输出add_custom_command(OUTPUT ...)
调用,那么使用它的任何目标(在本例中为“myexe”)将导致在构建该目标之前调用自定义命令。
因此,您实际上只需将代码更改为:
set(TestRunner "${CMAKE_CURRENT_BINARY_DIR}/test_runner.cpp")
add_executable(myexe ${TestRunner})
add_custom_command(
OUTPUT ${TestRunner}
COMMAND deps/cxxtest-4.4/bin/cxxtestgen --error-printer -o "${TestRunner}" src/My_test_suite.h
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)