Mi CMakeLists.txt
contiene esta línea:
file(GLOB lib_srcs Half/half.cpp Iex/*.cpp IlmThread/*.cpp Imath/*.cpp IlmImf/*.cpp)
y la IlmImf
carpeta contiene b44ExpLogTable.cpp
, que necesito excluir de la compilación.
¿Cómo lograrlo?
Respuestas:
Puede utilizar la list
función para manipular la lista, por ejemplo:
list(REMOVE_ITEM <list> <value> [<value> ...])
En su caso, tal vez algo como esto funcione:
list(REMOVE_ITEM lib_srcs "IlmImf/b44ExpLogTable.cpp")
CONFIGURE_DEPENDS
y necesita excluir un archivo producido por la compilación. Un filtro en la lista después de la file
llamada aún activa una reconstrucción que, en mi caso, estoy tratando de evitar.
list(FILTER
list(FILTER <list> <INCLUDE|EXCLUDE> REGEX <regular_expression>)
funciona bien para mí.
FILTRO es otra opción que podría ser más conveniente en algunos casos:
list(FILTER <list> <INCLUDE|EXCLUDE> REGEX <regular_expression>)
Esta línea excluye todos los elementos que terminan con el nombre de archivo requerido:
list(FILTER lib_srcs EXCLUDE REGEX ".*b44ExpLogTable.cpp$")
Aquí está la especificación Regex para 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 ...)
se introdujo en cmake v3.6: stackoverflow.com/a/42167646/3476780
.*test/.*
podría excluir todo si su proyecto está dentro de un árbol de directorios donde uno de los directorios principales se llama algo así como mytest
.
prueba esto : 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