我想从例如test_runner.cpp创建一个可执行文件:
add_executable(myexe ${CMAKE_CURRENT_BINARY_DIR}/test_runner.cpp)
Run Code Online (Sandbox Code Playgroud)
但是这个特定的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}"
)
Run Code Online (Sandbox Code Playgroud)
但现在我无法生成新的cmake构建文件,因为它抱怨缺少的源,这在预构建之前确实缺失.
Fra*_*ser 10
问题的关键是将GENERATED属性应用于"test_runner.cpp".这告诉CMake在配置时不检查它是否存在,因为它是作为构建过程的一部分创建的.
您可以手动应用此属性(例如,使用set_source_files_properties).但是,处理这个的正确方法是使用另一种形式add_custom_command,即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}"
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6482 次 |
| 最近记录: |