tutorial not make how gui found cmake

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

  1. El contenido inicial de la variable CMAKE_CXX_FLAGS caché es una combinación de CMAKE_CXX_FLAGS_INIT establecida por el propio CMake durante la detección del sistema operativo / cadena de herramientas y todo lo que se establece en la variable de entorno CXXFLAGS . Entonces puede llamar inicialmente:

    cmake -E env CXXFLAGS="-Wall" cmake ..

  2. Posteriormente, CMake esperaría que el usuario modifique la variable en caché CMAKE_CXX_FLAGS directamente para agregar cosas, por ejemplo, utilizando un editor como ccmake commit con CMake.

  3. 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 ).

  1. El CMAKE_EXE_LINKER_FLAGS_INIT , CMAKE_SHARED_LINKER_FLAGS_INIT o CMAKE_MODULE_LINKER_FLAGS_INIT no se combinan con las variables evironment LDFLAGS a CMAKE_EXE_LINKER_FLAGS , CMAKE_SHARED_LINKER_FLAGS y CMAKE_MODULE_LINKER_FLAGS .

    Entonces puede, por ejemplo, llamar a:

    cmake -E env LDFLAGS="-rpath=/home/abcd/libs/" cmake ..

  2. Véase más arriba.

  3. 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:

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.