CMake截断传递给函数的值
我在CMake中创建了一个函数,该函数应该接收两个参数,一个是字符串,另一个是源文件列表。问题是CMake截断了传递给函数的变量列表,我只得到第一个文件:CMake截断传递给函数的值,cmake,Cmake,我在CMake中创建了一个函数,该函数应该接收两个参数,一个是字符串,另一个是源文件列表。问题是CMake截断了传递给函数的变量列表,我只得到第一个文件: set( INCLUDES ${PROJECT_SOURCE_DIR}/include/smthcore/Interface.hpp ) set( SRC ${PROJECT_SOURCE_DIR}/src/Interface.cpp ${PROJECT_SOURCE_DIR}/src/detail/Clas
set(
INCLUDES
${PROJECT_SOURCE_DIR}/include/smthcore/Interface.hpp
)
set(
SRC
${PROJECT_SOURCE_DIR}/src/Interface.cpp
${PROJECT_SOURCE_DIR}/src/detail/Class.hpp
${PROJECT_SOURCE_DIR}/src/detail/Class.cpp
)
set(
TO_FORMAT
${INCLUDES}
${SRC}
)
message("111 " ${TO_FORMAT})
include(ClangFormat)
format_source(src ${TO_FORMAT})
其中消息
打印
/mnt/c/Users/Desktop/smth.Core/include/smthcore/Interface.hpp/mnt/c/Users/Desktop/smth.Core/src/Interface.cpp/mnt/c/Users/Desktop/smth.Core/src/detail/Class.hpp/mnt/c/Users/Desktop/smth.Core/src/detail/Class.cpp
但是在format\u source
里面我有
function(FORMAT_SOURCE trgt to_format)
message("222 " ${trgt})
message("333 " ${to_format})
endfunction(FORMAT_SOURCE trgt to_format)
和333张照片
333 /mnt/c/Users/Desktop/smth.Core/include/smthcore/Interface.hpp
我很困惑。帮助?编写CMake脚本时要记住的重要一点是,在文本CMake输入中,空格和
代码>是有效的参数分隔符(1)。换句话说,您不是用2个参数调用函数,而是用5个参数调用函数(列表中的每个元素TO_FORMAT
成为FORMAT_source
的单独参数)
有多种方法可以解决这个问题。最小的一个是引用到_格式的扩展,将其转换为单个参数,如下所示:
format_source(src "${TO_FORMAT}")
message("111 " ${TO_FORMAT})
message("111 " "${TO_FORMAT}")
但是,这很容易出错,并且与大多数本机CMake命令使用的样式并不匹配。因此,我建议采用另一种方法,使format\u source
接受任意数量的参数(类似于CMake命令,如add\u executable
或target\u link\u libraries
do):
(1) 请注意,您实际上可以在message()
的行为中注意到这一点,默认情况下,它会打印参数的直接串联。当你这样称呼它时:
format_source(src "${TO_FORMAT}")
message("111 " ${TO_FORMAT})
message("111 " "${TO_FORMAT}")
TO_FORMAT
的元素之间没有分隔符:它们各自构成了消息的独立参数。但是,如果你这样称呼它:
format_source(src "${TO_FORMAT}")
message("111 " ${TO_FORMAT})
message("111 " "${TO_FORMAT}")
元素之间会有分号分隔,因为整个列表(与分号分隔的字符串完全相同)成为message
的一个参数