在这个简单的CMakefile中,第一个脚本list.sh
输出一个包含两个生成文件file1.proto;file2.proto
的列表,指示CMake可以从源source.xml
构建它们(使用第二个脚本gen.sh
)。
cmake_minimum_required(VERSION 3.13)
set(source "source.xml")
execute_process(
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/list.sh ${source}
OUTPUT_VARIABLE protos
)
message("${protos}: ${source}")
add_custom_command(
OUTPUT ${protos}
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/gen.sh ${source}
DEPENDS ${source}
)
add_custom_target(my_target DEPENDS ${protos})
如果我运行以下命令,一切都会正常工作:
$ cmake ..
file1.proto;file2.proto: source.xml
-- Configuring done
-- Generating done
-- Build files have been written to: /build
$ make my_target
[100%] Generating file1.proto, file2.proto
[100%] Built target my_target
我应该添加什么才能运行代码生成:
$ make file1.proto
对于命令make
,EDIT autocomplete仅建议以下内容:
$ make (TAB TAB)
all cmake_force edit_cache/ preinstall
clean default_target help preinstall/
clean/ depend my_target rebuild_cache
cmake_check_build_system edit_cache my_target/ rebuild_cache/
发布于 2020-09-20 02:02:56
来自@KamilCuk的解决方案:
添加以下代码可以单独构建每个proto文件
(它可以工作,但是cmake会抱怨循环依赖!)
foreach(p ${protos})
add_custom_target(${p} DEPENDS {CMAKE_CURRENT_BINARY_DIR}/${p})
endforeach()
https://stackoverflow.com/questions/61444316
复制相似问题