首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >包含生成器表达式的列表无效

包含生成器表达式的列表无效
EN

Stack Overflow用户
提问于 2021-03-17 21:33:59
回答 1查看 40关注 0票数 0
代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 3.13)

project(hello)

set(SRCS    main.c  hello.c )
    
set(HEADERS hello.h )

add_executable(hello ${SRCS} ${HEADERS})

target_include_directories(hello PRIVATE 
    "inc1"
    "inc2"
)

target_include_directories(hello PRIVATE "headers")

set(var3)
list(APPEND var3 "inc3")
list(APPEND var3 "inc4")
list(APPEND var3 "$<TARGET_PROPERTY:hello,INCLUDE_DIRECTORIES>")
message(STATUS "var3:${var3}")

list(LENGTH var3 list_len1)
message(STATUS "list_len1 :${list_len1}")
#file(GENERATE OUTPUT f.txt CONTENT ${list_len1})
file(GENERATE OUTPUT f.txt CONTENT ${var3})

它显示:

代码语言:javascript
运行
复制
-- var3:inc3;inc4;$<TARGET_PROPERTY:hello,INCLUDE_DIRECTORIES>
-- list_len1 :3
CMake Error at CMakeLists.txt:29 (file):
  file Unknown argument to GENERATE subcommand.

file(GENERATE OUTPUT f.txt CONTENT ${var3})行生成错误。为什么?我们通常有一个由3个元素组成的列表,inc3,inc4与生成器表达式连接在一起,展开后的表达式是: /Users/windev/works/proj/inc1;/Users/windev/works/proj/inc2;/Users/windev/works/proj/headers

所以为什么我们不用/Users/windev/works/proj/inc1;/Users/windev/works/proj/inc2;/Users/windev/works/proj/headers,inc3,inc4

在我的f.txt中打印

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-03-17 21:59:29

file(GENERATE)命令规范

代码语言:javascript
运行
复制
file(GENERATE OUTPUT output-file
     <INPUT input-file|CONTENT content>
     [CONDITION expression] [TARGET target])

也就是说,content is a参数。

因为您的变量var3包含多个值,所以${var3}将扩展为多个值。这就是错误消息的内容。

file(GENERATE)的正确调用应该是

代码语言:javascript
运行
复制
file(GENERATE OUTPUT f.txt CONTENT "${var3}")

这样,生成的文件中的呼叫列表元素将由分号(;)分隔。

如果要在元素之间使用空格分隔符,则需要在生成文件之前连接列表元素:

代码语言:javascript
运行
复制
string(JOIN " " var3_string ${var3})
file(GENERATE OUTPUT f.txt CONTENT "${var3_string}")

或者使用$<JOIN>生成器表达式:

代码语言:javascript
运行
复制
file(GENERATE OUTPUT f.txt CONTENT "$<JOIN:${var3}, >")

后一种变体的优点是它也加入了生成器表达式的内容。( string命令将整个生成器表达式视为单个值)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66674196

复制
相关文章

相似问题

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