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})
它显示:
-- 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中打印
谢谢
发布于 2021-03-17 21:59:29
file(GENERATE)命令规范
file(GENERATE OUTPUT output-file
<INPUT input-file|CONTENT content>
[CONDITION expression] [TARGET target])
也就是说,content
is a参数。
因为您的变量var3
包含多个值,所以${var3}
将扩展为多个值。这就是错误消息的内容。
对file(GENERATE)
的正确调用应该是
file(GENERATE OUTPUT f.txt CONTENT "${var3}")
这样,生成的文件中的呼叫列表元素将由分号(;
)分隔。
如果要在元素之间使用空格分隔符,则需要在生成文件之前连接列表元素:
string(JOIN " " var3_string ${var3})
file(GENERATE OUTPUT f.txt CONTENT "${var3_string}")
或者使用$<JOIN>
生成器表达式:
file(GENERATE OUTPUT f.txt CONTENT "$<JOIN:${var3}, >")
后一种变体的优点是它也加入了生成器表达式的内容。( string
命令将整个生成器表达式视为单个值)。
https://stackoverflow.com/questions/66674196
复制相似问题