我现在遇到的问题是,我只想通过抓住所有内容来管理我的源文件列表,并删除一些我不需要的几率.我希望Cmake为此提供了很好的内置工具.
所以我可以从:
file(GLOB A "Application/*.cpp")
Run Code Online (Sandbox Code Playgroud)
我觉得我想创建另一个要删除的文件列表,我想告诉CMake:从列表中删除列表B中的项目.
如果这是Python我可能会做类似的事情:
C = [f for f in A if f not in B]
Run Code Online (Sandbox Code Playgroud)
我可能已经搞砸了这种语法,但我想知道是否有内置支持以更优雅的方式管理这些文件列表?
即使我可以做类似我的Python示例,A是绝对路径列表,因此构造B是笨重的.
为什么绝对路径呢?一旦你重新定位源代码,这似乎会破坏你的构建.
您可以使用带有REMOVE_ITEM选项的list命令来执行此操作:
list(REMOVE_ITEM <list> <value> [<value> ...])
Run Code Online (Sandbox Code Playgroud)
看一看:
file(GLOB FOO *)
set (ITEMS_TO_REMOVE "item;item2;item3")
message(STATUS "FOO is ${FOO}")
list(REMOVE_ITEM FOO ${ITEMS_TO_REMOVE})
message(STATUS "FOO is now ${FOO}")
Run Code Online (Sandbox Code Playgroud)
请记住,返回的路径file(GLOB)是绝对的,您可能希望通过预先添加${CMAKE_CURRENT_LIST_DIR}到每个项目来构建要删除的项目列表:
set (ITEMS_TO_REMOVE "${CMAKE_CURRENT_LIST_DIR}/item;
${CMAKE_CURRENT_LIST_DIR}/item2;
${CMAKE_CURRENT_LIST_DIR}/item3")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3782 次 |
| 最近记录: |