2016-03-21 425 views
3

以下是我的CMakeLists.txt文件的一部分。list(REMOVE_ITEM)not in cmake

file(GLOB SOURCES "xyz/*.cpp") 
message("${SOURCES}") 
list(REMOVE_ITEM SOURCES "src1.cpp") 
message("${SOURCES}") 

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

为什么list(REMOVE_ITEM)不适合我的情况?任何帮助都是无价的。

+0

您的'SOURCES'列表中是否有与src1.cpp'完全相同的项? – Tsyvarev

+0

@Tsyvarev我不明白你的问题。 – SRINI794

+0

正如@kristian所回答的那样,您的'SOURCES'列表中不包含项目“src1.cpp”(正好)。这就是为什么'list(REMOVE_ITEM)'在你的情况下什么都不做的原因。 – Tsyvarev

回答

4

我为您的问题找到了解决方案。我的解决方案背后的想法是,为了获得特殊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}") 
+0

非常感谢。奇迹般有效。如果您觉得这个问题已经足够好请立即注册:) – SRINI794

+4

变量[CMAKE_CURRENT_SOURCE_DIR](https://cmake.org/cmake/help/v3.0/variable/CMAKE_CURRENT_SOURCE_DIR.html)中包含的路径已经*绝对*。因此,您可以使用'list {REMOVE_ITEM}'作为文件名'$ {CMAKE_CURRENT_SOURCE_DIR}/src/test.cpp'而不用'get_filename_component'进行预处理。 – Tsyvarev

+0

@Tsyvarev它像一个魅力。生病编辑答案。 – SRINI794