not - Pasando las opciones del compilador cmake
cmake vs make (2)
Sí, puede agregar opciones de compilador y enlazador.
Pero hay dos cosas que debe diferenciar en CMake: la primera llamada para generar el entorno de compilación y todas las llamadas consecutivas para volver a generar ese entorno de compilación después de los cambios en sus archivos o dependencias
CMakeList.txt
.
Estas son algunas de las posibilidades (excluyendo las variantes de toolchain más complejas):
Agregar banderas del compilador
-
El contenido inicial de la variable
CMAKE_CXX_FLAGScaché es una combinación deCMAKE_CXX_FLAGS_INITestablecida por el propio CMake durante la detección del sistema operativo / cadena de herramientas y todo lo que se establece en la variable de entornoCXXFLAGS. Entonces puede llamar inicialmente:cmake -E env CXXFLAGS="-Wall" cmake .. -
Posteriormente, CMake esperaría que el usuario modifique la variable en caché
CMAKE_CXX_FLAGSdirectamente para agregar cosas, por ejemplo, utilizando un editor comoccmakecommit con CMake. -
Puede introducir fácilmente su propio tipo de compilación como
ALL_WARNINGS. Se añaden las partes específicas del tipo de construcción:cmake -DCMAKE_CXX_FLAGS_ALL_WARNINGS:STRING="-Wall" -DCMAKE_BUILD_TYPE=ALL_WARNINGS ..
Agregar banderas de vinculador
Las opciones del vinculador son más o menos equivalentes a las opciones del compilador.
Solo que los nombres de las variables de CMake dependen del tipo de destino (
EXE
,
SHARED
o
MODULE
).
-
El
CMAKE_EXE_LINKER_FLAGS_INIT,CMAKE_SHARED_LINKER_FLAGS_INIToCMAKE_MODULE_LINKER_FLAGS_INITno se combinan con las variables evironmentLDFLAGSaCMAKE_EXE_LINKER_FLAGS,CMAKE_SHARED_LINKER_FLAGSyCMAKE_MODULE_LINKER_FLAGS.Entonces puede, por ejemplo, llamar a:
cmake -E env LDFLAGS="-rpath=/home/abcd/libs/" cmake .. -
Véase más arriba.
-
Se añaden partes específicas del tipo de construcción:
cmake -DCMAKE_SHARED_LINKER_FLAGS_MY_RPATH:STRING="-rpath=/home/abcd/libs/" -DCMAKE_BUILD_TYPE=MY_RPATH ..
Alternativas
Solo tenga en cuenta que CMake proporciona una variable especial para establecer indicadores de compilador / enlazador de una manera independiente de la plataforma. Por lo tanto, no necesita conocer la opción específica del compilador / enlazador.
Aquí hay unos ejemplos:
-
CMAKE_CXX_STANDARD -
CMAKE_POSITION_INDEPENDENT_CODE -
CMAKE_BUILD_RPATH -
CMAKE_INSTALL_RPATH_USE_LINK_PATH
Desafortunadamente, no hay ninguno para el nivel de advertencia del compilador ( yet )
Referencias
Sé cómo pasar las opciones del compilador usando el comando cmake
set(CMAKE_CXX_FLAGS "-Wall -Wno-dev -Wl,-rpath=/home/abcd/libs/")
¿Hay alguna forma de pasar las opciones desde la línea de comandos, que anulará las opciones CMakeList.txt, algo como:
cmake -Wl,-rpath=/home/abcd/newlibs/ path/to/CMakeLists.txt
o
cmake -D CMAKE_CXX_FLAGS="-Wno-dev -Wl,-rpath=/home/abcd/libs/" path/to/CMakeLists.txt
Mi principal problema es que quiero saber cómo agregar banderas y cómo anular las banderas de compilación existentes desde la línea de comandos.
cmake -D CMAKE_CXX_FLAGS="-Wno-dev -Wl,-rpath=/home/abcd/libs/" path/to/CMakeLists.txt
Esto debería funcionar, el problema es que si encuentra_paquete () algún paquete que también cambia CMAKE_CXX_FLAGS, entonces no solo funcionaría parcialmente.