list(REMOVE_ITEM)无法在cmake中运行

sp4*_*497 7 cmake

以下是我的CMakeLists.txt文件的一部分.

file(GLOB SOURCES "xyz/*.cpp")
message("${SOURCES}")
list(REMOVE_ITEM SOURCES "src1.cpp")
message("${SOURCES}")
Run Code Online (Sandbox Code Playgroud)

这里的文件"xyz/*.cpp"是一个相对路径.${SOURCES}之前和之后的内容是相同的REMOVE_ITEM.

为什么list(REMOVE_ITEM)不在我的案子中工作?任何帮助都是非常宝贵的.

kri*_*ian 10

我找到了解决问题的方法.我的解决方案背后的想法是,获取特殊cpp文件的完整路径,因为我看到,该命令file(GLOB SOURCES "src/*.cpp")给了我一个完整路径列表.获取特殊文件的完整路径后,我可以从列表中删除.这是一个小例子

cmake_minimum_required(VERSION 3.4)
project(list_remove_item_ex)

file(GLOB SOURCES "src/*.cpp")
# this is the file I want to exclude / remove from the list
get_filename_component(full_path_test_cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/test.cpp ABSOLUTE)
message("${full_path_test_cpp}")

list(REMOVE_ITEM SOURCES "${full_path_test_cpp}")
message("${SOURCES}")
Run Code Online (Sandbox Code Playgroud)

  • 变量[CMAKE_CURRENT_SOURCE_DIR](https://cmake.org/cmake/help/v3.0/variable/CMAKE_CURRENT_SOURCE_DIR.html)中包含的路径已经是*绝对*.所以你可以使用`$ {CMAKE_CURRENT_SOURCE_DIR}/src/test.cpp`和`list(REMOVE_ITEM)`而无需通过`get_filename_component`进行预处理. (5认同)