Cómo agregar el indicador del compilador “-l” (ell) en CMake

3 minutos de lectura

Como agregar el indicador del compilador l ell en CMake
Estudio de evolución de metal

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.

    – 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


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)

  • esto funcionó bien para mí también, con las bibliotecas GSL. Sin embargo, para poder trabajar, debe cancelar el set(CMAKE_CXX_FLAGS "-lpq") y el add_definitions(-lpq) del ejemplo anterior.

    –Duccio Piovani

    23 de abril de 2018 a las 9:16

  • @DuccioPiovani: La pregunta describe la forma correcta de vincular. Esto implica que otros intentos de vinculación (a través de CMAKE_CXX_FLAGS o add_definitions) no son necesarios.

    – Tsyvarev

    23 de abril de 2018 a las 9:29

  • Ahora estoy enfrentando el mismo problema, pero al intentar construir un paquete de python usando pybind11 y CMakelists.txt. En este caso, el comando add_executable no está presente y, por lo tanto, no puedo usar el target_link_libraries(), porque no hay un ejecutable para vincularlo también. ¿Tiene alguna sugerencia en este caso?

    –Duccio Piovani

    23 de abril de 2018 a las 9:33


  • @DuccioPiovani: No soy un experto en el uso de pybind11. Dijiste que no hay add_executable El comando está presente, pero podría ser otro comando específico de pybind11, que crea un archivo ejecutable. Lo más probable es que este comando cree un ejecutable objetivo, que puede vincular con una biblioteca como de costumbre. te sugiero que te prepares nueva pregunta: allí puede proporcionar más detalles (por ejemplo, su CMakeLists.txt código). Si encuentra útil la pregunta/respuesta actual para su nueva pregunta, puede incluir el enlace apropiado en su pregunta.

    – Tsyvarev

    23 de abril de 2018 a las 9:42

  • Gracias, lo haré de inmediato.

    –Duccio Piovani

    23 de abril de 2018 a las 9:43

-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

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad