2016-03-21 424 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