首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CMake:除了构建目标之外,还需要构建文件

CMake:除了构建目标之外,还需要构建文件
EN

Stack Overflow用户
提问于 2020-04-27 00:34:32
回答 1查看 47关注 0票数 0

在这个简单的CMakefile中,第一个脚本list.sh输出一个包含两个生成文件file1.proto;file2.proto的列表,指示CMake可以从源source.xml构建它们(使用第二个脚本gen.sh)。

代码语言:javascript
运行
复制
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})

如果我运行以下命令,一切都会正常工作:

代码语言:javascript
运行
复制
$ 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

我应该添加什么才能运行代码生成:

代码语言:javascript
运行
复制
$ make file1.proto

对于命令make,EDIT autocomplete仅建议以下内容:

代码语言:javascript
运行
复制
$ 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/  
EN

回答 1

Stack Overflow用户

发布于 2020-09-20 02:02:56

来自@KamilCuk的解决方案:

添加以下代码可以单独构建每个proto文件

(它可以工作,但是cmake会抱怨循环依赖!)

代码语言:javascript
运行
复制
foreach(p ${protos})
  add_custom_target(${p} DEPENDS {CMAKE_CURRENT_BINARY_DIR}/${p})
endforeach()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61444316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档