2016-03-21 8 views
3

Folgendes ist ein Teil meiner CMakeLists.txt-Datei.Liste (REMOVE_ITEM) funktioniert nicht in cmake

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

Hier in Datei "xyz/*.cpp" ist ein relativer Pfad. Inhalt von ${SOURCES} ist das gleiche vor und nach REMOVE_ITEM.

Warum funktioniert list(REMOVE_ITEM) nicht in meinem Fall? Jede Hilfe wäre von unschätzbarem Wert.

+0

Ist Ihre 'QUELLEN' Liste genau wie' src1.cpp'? – Tsyvarev

+0

@Tsyvarev Ich habe deine Frage nicht verstanden. – SRINI794

+0

Wie @kristian geantwortet hat, enthält Ihre 'SOURCES'-Liste nicht das Element' src1.cpp' (genau). Aus diesem Grund tut 'list (REMOVE_ITEM)' in Ihrem Fall nichts. – Tsyvarev

Antwort

4

Ich habe eine Lösung für Ihr Problem. Die Idee hinter meiner Lösung ist, den vollständigen Pfad der speziellen cpp-Datei zu erhalten, weil ich gesehen habe, dass der Befehl file(GLOB SOURCES "src/*.cpp") mir eine Liste voller Pfade gibt. Nachdem ich den vollständigen Pfad der speziellen Datei erhalten hatte, konnte ich die Liste löschen. Hier ist ein kleines Beispiel

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

Vielen Dank. Klappt wunderbar. Wenn Sie der Meinung sind, dass die Frage gut genug ist, bitte upvote :) – SRINI794

+4

Der Pfad in der Variablen [CMAKE_CURRENT_SOURCE_DIR] (https://cmake.org/cmake/help/v3.0/variable/CMAKE_CURRENT_SOURCE_DIR.html) ist bereits * absolut *. Sie können also den Dateinamen '$ {CMAKE_CURRENT_SOURCE_DIR}/src/test.cpp' mit' list (REMOVE_ITEM) 'ohne Vorverarbeitung von' get_filename_component' verwenden. – Tsyvarev

+0

@Tsyvarev es funktioniert wie ein Charme. Ich werde die Antwort bearbeiten. – SRINI794

Verwandte Themen