Trabaja en Ubuntu 16
solía g++ main.cpp -lpq
comando para compilar mi pequeño proyecto. ahora uso clion y quiero hacer lo mismo que yo hago con g++
. Pero no puedo agregar banderas del compilador en hacer archivo y obtener error de compilació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 el archivo cmake y obtengo CMAKE_CXX_FLAGS
con -lpq bandera.
CMAKE_CXX_FLAGS is -lpq
-- Configuring done
-- Generating done
¿Cómo agregar correctamente las banderas del compilador al archivo cmake?
Bandera -l
es para enlazadorno para compilador. Esta bandera se utiliza para enlazar 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 del compilador (CFLAGS) sino un indicador del 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 agregar las bibliotecas o su plataforma, es decir:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
Para verificar los indicadores exactos que cmake está pasando al compilador o al enlazador, siempre puede ejecutar, desde el directorio de compilación, el siguiente comando:
make VERBOSE=1
Bandera
-l
es para enlazadorno para compilador. Esta bandera se utiliza para enlazar con bibliotecas. CMake tiene un comando especial target_link_libraries para ese propósito.– Tsyvarev
31 de marzo de 2017 a las 8:59
¡Gracias! Agregar
target_link_libraries(day_g pq)
y todo funciona bien! ¿Puedes publicar tu respuesta para que pueda marcarla como respuesta?– Estudio de evolución de metal
31 de marzo de 2017 a las 9:03
No es la primera persona que pregunta sobre un problema dado, pero estoy de acuerdo en que otras preguntas no son fáciles de buscar. Tratando de hacer una pregunta dada canónico.
– Tsyvarev
31 de marzo de 2017 a las 9:12