如何自动在列表中添加公共路径前缀的所有文件名?例如,在CMakeLists.txt中有一个文件列表:
SET(SRC_FILES foo1.cpp foo2.cpp)
Run Code Online (Sandbox Code Playgroud)
我想得到一个与此相当的列表:
${CMAKE_CURRENT_SOURCE_DIR}/foo1.cpp ${CMAKE_CURRENT_SOURCE_DIR}/foo2.cpp
Run Code Online (Sandbox Code Playgroud)
我需要这个在PARENT_SCOPE上下文中使用文件名,例如
SET(FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${SRC_FILES} PARENT_SCOPE)
Run Code Online (Sandbox Code Playgroud)
所以,另一个目录中的CMakeFiles.txt仍然可以找到这些文件.
从本质上讲,我期待这样的事情(伪代码):
SET(FILES_TO_TRANSLATE PREPEND_ALL_NAMES(${CMAKE_CURRENT_SOURCE_DIR} ${SRC_FILES}) PARENT_SCOPE)
Run Code Online (Sandbox Code Playgroud)
这是否容易实现,或者我是否必须使用"foreach"循环来创建新的文件列表?
cod*_*-gs 28
CMake 3.12添加了列表变换器 - 其中一个变换器是PREPEND.因此,可以使用以下内联来预先添加列表中的所有条目:
list(TRANSFORM FILES_TO_TRANSLATE PREPEND ${CMAKE_CURRENT_SOURCE_DIR})
... FILES_TO_TRANSLATE列表的变量名称在哪里.
更多信息可以在CMake文档中找到.
Din*_*hen 27
以下功能可能是您想要的.
FUNCTION(PREPEND var prefix)
SET(listVar "")
FOREACH(f ${ARGN})
LIST(APPEND listVar "${prefix}/${f}")
ENDFOREACH(f)
SET(${var} "${listVar}" PARENT_SCOPE)
ENDFUNCTION(PREPEND)
Run Code Online (Sandbox Code Playgroud)
要使用它,
PREPEND(FILES_TO_TRANSLATE ${CMAKE_CURRENT_SOURCE_DIR} ${SRC_FILES})
Run Code Online (Sandbox Code Playgroud)
gen*_*a2x 12
string(REGEX REPLACE "([^;]+)" "ANYPREFIX/\\1.cpp" outputlist "${inputlist}")
Run Code Online (Sandbox Code Playgroud)
将ANYPREFIX替换为任何前缀,将".cpp"替换为您需要的任何后缀.
| 归档时间: |
|
| 查看次数: |
18354 次 |
| 最近记录: |