Cómo agregar el indicador del compilador "-l" (ell) en CMake
Trabajar en Ubuntu 16
Utilicé g++ main.cpp -lpq
el comando para compilar mi pequeño proyecto. Ahora uso Clion y quiero hacer lo mismo que hago con g++
. Pero no puedo agregar indicadores del compilador en el archivo cmake y obtengo un 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
el indicador -lpq .
CMAKE_CXX_FLAGS is -lpq
-- Configuring done
-- Generating done
¿Cómo agregar correctamente los indicadores del compilador al archivo cmake?
El indicador -l
es para el vinculador , no para el compilador . 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 del compilador (CFLAGS) sino un indicador del vinculador.
Para pasar una biblioteca en un proyecto CMake debes 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 las banderas exactas que cmake está pasando al compilador o vinculador, siempre puede ejecutar, desde el directorio de compilación, el siguiente comando:
make VERBOSE=1