Abgesehen von lib_srcs anstelle von lib_src und IlmImf anstelle von IlmThread hat das den Trick getan! Danke vielmals !
Berak
19
Hinweis: Stellen Sie beim Entfernen des Listenelements sicher, dass der gesuchte Wert genau mit dem in der Liste übereinstimmt. Ich hatte einige Probleme beim Mischen von $ {CMAKE_SOURCE_DIR} /src/file_to_remove.cpp mit $ {CMAKE_CURRENT_SOURCE_DIR} /../ file_to_remove.cpp. Es zeigt auf dieselbe Position, aber es ist nicht dieselbe Zeichenfolge. Mit message ("$ {VARIABLE_NAME}") können Sie diese Inhalte debuggen.
Hbobenicio
Dies hilft nicht, wenn Sie CONFIGURE_DEPENDSeine vom Build erstellte Datei verwenden und ausschließen müssen. Ein Filter in der Liste nach dem fileAufruf löst immer noch eine Neuerstellung aus, die ich in meinem Fall zu vermeiden versuche.
simon.watts
Es ist viel besser zu benutzenlist(FILTER
hukeping
2
Die obige Lösung funktioniert bei Camke Version 3.10.2 nicht. Die folgende Lösung list(FILTER <list> <INCLUDE|EXCLUDE> REGEX <regular_expression>) funktioniert jedoch gut bei mir.
MH Yip
41
FILTER ist eine weitere Option, die in einigen Fällen bequemer sein kann:
The following characters have special meaning in regular expressions:
^ Matches at beginning of input
$ Matches at end of input
. Matches any single character
[ ] Matches any character(s) inside the brackets
[^ ] Matches any character(s) not inside the brackets
- Inside brackets, specifies an inclusive range between
characters on either side e.g. [a-f] is [abcdef]
To match a literal - using brackets, make it the first
or the last character e.g. [+*/-] matches basic
mathematical operators.
* Matches preceding pattern zero or more times
+ Matches preceding pattern one or more times
? Matches preceding pattern zero or once only
| Matches a pattern on either side of the |
() Saves a matched subexpression, which can be referenced
in the REGEX REPLACE operation. Additionally it is saved
by all regular expression-related commands, including
e.g. if( MATCHES ), in the variables CMAKE_MATCH_(0..9).
Dies ist definitiv eine bessere Antwort. Wenn Sie jedoch versuchen, damit ein ganzes Verzeichnis auszuschließen, oder wenn Ihre Regex durcheinander ist, können Sie möglicherweise mehr ausschließen, als Sie möchten. Wenn Sie beispielsweise versuchen, auszuschließen, wird .*test/.*möglicherweise alles ausgeschlossen, wenn sich Ihr Projekt in einem Verzeichnisbaum befindet, in dem eines der übergeordneten Verzeichnisse so etwas wie heißt mytest.
CONFIGURE_DEPENDS
eine vom Build erstellte Datei verwenden und ausschließen müssen. Ein Filter in der Liste nach demfile
Aufruf löst immer noch eine Neuerstellung aus, die ich in meinem Fall zu vermeiden versuche.list(FILTER
list(FILTER <list> <INCLUDE|EXCLUDE> REGEX <regular_expression>)
funktioniert jedoch gut bei mir.FILTER ist eine weitere Option, die in einigen Fällen bequemer sein kann:
Diese Zeile schließt alle Elemente aus, die mit dem erforderlichen Dateinamen enden:
Hier ist die Regex-Spezifikation für cmake:
quelle
list(REMOVE_ITEM
list(FILTER ...)
in cmake v3.6 eingeführt wurde: stackoverflow.com/a/42167646/3476780.*test/.*
möglicherweise alles ausgeschlossen, wenn sich Ihr Projekt in einem Verzeichnisbaum befindet, in dem eines der übergeordneten Verzeichnisse so etwas wie heißtmytest
.Versuche dies :
CMakeLists.txt
quelle