para libreria descargar cmake

cmake - libreria - descargar opencv para windows 10



¿Cómo agregar un enlazador o un indicador de compilación en el archivo cmake? (5)

Estoy usando el compilador arm-linux-androideabi-g++ . Cuando intento compilar un programa simple de "hello world" compila bien. Cuando lo -fexceptions agregando un manejo de excepción simple en ese código también funciona (después de agregar -fexceptions ... supongo que está deshabilitado por defecto)

Esto es para un dispositivo Android y solo quiero usar cmake not ndk-build

Por ejemplo - first.cpp

#include <iostream> using namespace std; int main() { try{ } catch(...) { } return 0; }

./arm-linux-androideadi-g++ -o first-test first.cpp -fexceptions

Funciona sin problemas ..

El problema ... Estoy intentando compilar el archivo con un archivo cmake.

Quiero agregar las -fexceptions como una bandera. Lo intenté con

set (CMAKE_EXE_LINKER_FLAGS -fexceptions ) or set (CMAKE_EXE_LINKER_FLAGS "fexceptions" )

y

set ( CMAKE_C_FLAGS "fexceptions")

Todavía muestra un error.


En las versiones más nuevas de CMake, también puede establecer indicadores de compilador y enlazador para un objetivo único utilizando target_compile_options y target_link_libraries respectivamente (sí, este último también establece las opciones del enlazador):

target_compile_options(first-test PRIVATE -fexceptions)

La ventaja de este método es que puede controlar la propagación de opciones a otros destinos que dependen de este a través de PUBLIC y PRIVATE .


Intente configurar la variable CMAKE_CXX_FLAGS lugar de CMAKE_C_FLAGS :

set (CMAKE_CXX_FLAGS "-fexceptions")

La variable CMAKE_C_FLAGS solo afecta al compilador de C, pero está compilando el código de C ++.

Agregar el indicador a CMAKE_EXE_LINKER_FLAGS es redundante.


Supongamos que desea agregar esos indicadores (mejor para declararlos en una constante):

SET(GCC_COVERAGE_COMPILE_FLAGS "-fprofile-arcs -ftest-coverage") SET(GCC_COVERAGE_LINK_FLAGS "-lgcov")

Hay varias formas de agregarlos:

  1. El más fácil (no limpio, fácil y conveniente, funciona solo para indicadores de compilación, C & C ++ a la vez):

    add_definitions(${GCC_COVERAGE_COMPILE_FLAGS})

  2. Anexando a las correspondientes variables cmake

    SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" ) SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}" )

  3. Usando las propiedades del objetivo, cf. doc cmake compila propiedad de destino de indicador y necesita conocer el nombre del objetivo.

    get_target_property(TEMP ${THE_TARGET} COMPILE_FLAGS) if(TEMP STREQUAL "TEMP-NOTFOUND") SET(TEMP "") # set to empty string else() SET(TEMP "${TEMP} ") # a space to cleanly separate from existing content endif() # append our values SET(TEMP "${TEMP}${GCC_COVERAGE_COMPILE_FLAGS}" ) set_target_properties(${THE_TARGET} PROPERTIES COMPILE_FLAGS ${TEMP} )

En este momento utilizo el método 2.


También puede agregar indicadores del enlazador a un objetivo específico utilizando la propiedad LINK_FLAGS :

set_property(TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS " ${flag}")

Si desea propagar este cambio a otros destinos, puede crear un objetivo ficticio para vincularlo.