我目前遇到的问题是,我只是希望通过抓取所有内容并删除一些我不需要的零碎内容来管理我的源文件列表。我希望 Cmake 为此提供很好的内置工具。
所以我可能会从以下开始:
file(GLOB A "Application/*.cpp")
我觉得我想创建另一个要删除的文件列表,并且我想告诉 CMake:从列表 A 中删除列表 B 中的项目。
如果这是 Python 我可能会这样做:
C = [f for f in A if f not in B]
我可能搞砸了该语法,但我想知道是否有内置支持以更优雅的方式管理这些文件列表?
即使我可以做像我的 Python 示例那样的事情,A 是绝对路径列表,因此构建 B 很笨拙。
为什么绝对路径呢?一旦您重新定位源,这似乎就会破坏您的构建。
您可以通过使用来做到这一点列表命令 http://www.cmake.org/cmake/help/v2.8.12/cmake.html#command:list使用 REMOVE_ITEM 选项:
list(REMOVE_ITEM <list> <value> [<value> ...])
看一看:
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}")
请记住,返回的路径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")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)