Cómo agregar la bandera del comstackdor “-l” (ell) en CMake

Trabaja en Ubuntu 16

g++ main.cpp -lpq comando g++ main.cpp -lpq para g++ main.cpp -lpq mi pequeño proyecto. Ahora uso Clion y quiero hacer lo mismo que hago con g++ . Pero no puedo agregar indicadores de comstackción en el archivo cmake y obtener un error de comstackción.

 cmake_minimum_required(VERSION 3.5.1) project(day_g) set(CMAKE_CXX_FLAGS "-lpq") add_definitions(-lpq) message("CMAKE_CXX_FLAGS is ${CMAKE_CXX_FLAGS}") set(CMAKE_CXX_STANDARD 11) set(SOURCE_FILES main.cpp) add_executable(day_g ${SOURCE_FILES}) 

También ejecuto solo archivo cmake y obtengo CMAKE_CXX_FLAGS con -lpq flag.

 CMAKE_CXX_FLAGS is -lpq -- Configuring done -- Generating done 

¿Cómo se agregan correctamente las banderas del comstackdor al archivo cmake?

La bandera -l es para el enlazador , no para el comstackdor . Esta bandera se utiliza para vincular con bibliotecas. CMake tiene un comando especial target_link_libraries para ese propósito:

 target_link_libraries(day_g pq) 

-lq no es un indicador de comstackdor (CFLAGS) sino un indicador de enlazador.

Para pasar una biblioteca en un proyecto CMake, debe usar:

 target_link_libraries(target_name libraries...) 

Tenga en cuenta que si especifica ‘q’ como biblioteca, el proyecto se vinculará con libq.a o, si está en Windows q.dll.

… en su CMakeLists.txt la línea correcta para agregar es:

 target_link_libraries(day_g pq) 

Tenga en cuenta también que cuando agrega un CFLAG también debe “recordar” los anteriores que pueden ser agregados por las bibliotecas o por su plataforma, es decir:

 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") 

Para verificar las banderas exactas que cmake está pasando al comstackdor o al enlazador, siempre puede ejecutar, desde el directorio de comstackción, el siguiente comando:

 make VERBOSE=1