My CMakeLists.txt
contient cette ligne:
file(GLOB lib_srcs Half/half.cpp Iex/*.cpp IlmThread/*.cpp Imath/*.cpp IlmImf/*.cpp)
et le IlmImf
dossier contient b44ExpLogTable.cpp
, que je dois exclure de la construction.
Comment y parvenir?
Réponses:
Vous pouvez utiliser la list
fonction pour manipuler la liste, par exemple:
list(REMOVE_ITEM <list> <value> [<value> ...])
Dans votre cas, peut-être que quelque chose comme ça fonctionnera:
list(REMOVE_ITEM lib_srcs "IlmImf/b44ExpLogTable.cpp")
CONFIGURE_DEPENDS
et devez exclure un fichier produit par la construction. Un filtre sur la liste après l' file
appel déclenche toujours une reconstruction que, dans mon cas, j'essaie d'éviter.
list(FILTER
list(FILTER <list> <INCLUDE|EXCLUDE> REGEX <regular_expression>)
fonctionne bien pour moi.
FILTER est une autre option qui pourrait être plus pratique dans certains cas:
list(FILTER <list> <INCLUDE|EXCLUDE> REGEX <regular_expression>)
Cette ligne exclut tous les éléments se terminant par le nom de fichier requis:
list(FILTER lib_srcs EXCLUDE REGEX ".*b44ExpLogTable.cpp$")
Voici la spécification Regex pour cmake:
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).
list(REMOVE_ITEM
list(FILTER ...)
été introduit dans cmake v3.6: stackoverflow.com/a/42167646/3476780
.*test/.*
peut tout exclure si votre projet se trouve dans une arborescence de répertoires où l'un des répertoires parents est appelé quelque chose comme mytest
.
essaye ça : CMakeLists.txt
install(DIRECTORY ${CMAKE_SOURCE_DIR}/
DESTINATION ${CMAKE_INSTALL_PREFIX}
COMPONENT copy-files
PATTERN ".git*" EXCLUDE
PATTERN "*.in" EXCLUDE
PATTERN "*/build" EXCLUDE)
add_custom_target(copy-files
COMMAND ${CMAKE_COMMAND} -D COMPONENT=copy-files
-P cmake_install.cmake)
$cmake <src_path> -DCMAKE_INSTALL_PREFIX=<install_path>
$cmake --build . --target copy-files