Arbeite an Ubuntu 16
ich benutzte g++ main.cpp -lpq
Befehl für den Compiler meines kleinen Projekts. Jetzt benutze ich Klion und will dasselbe tun, was ich tue g++
. Aber ich kann keine Compiler-Flags hinzufügen cm machen Datei und Kompilierfehler erhalten.
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})
Außerdem führe ich nur die cmake-Datei aus und bekomme CMAKE_CXX_FLAGS
mit -lpq Flagge.
CMAKE_CXX_FLAGS is -lpq
-- Configuring done
-- Generating done
Wie richtig Compiler-Flags zur cmake-Datei hinzufügen?
Flagge -l
ist für Linkernicht für Compiler. Dieses Flag wird für die Verknüpfung mit Bibliotheken verwendet. CMake hat einen speziellen Befehl target_link_libraries zu diesem Zweck:
target_link_libraries(day_g pq)
-lq ist kein Compiler-Flag (CFLAGS), sondern ein Linker-Flag.
Um eine Bibliothek in einem CMake-Projekt zu übergeben, sollten Sie Folgendes verwenden:
target_link_libraries(target_name libraries...)
Beachten Sie, dass, wenn Sie ‘q’ als Bibliothek angeben, das Projekt mit libq.a oder, wenn Sie Windows verwenden, mit q.dll verknüpft wird.
… in Ihrer CMakeLists.txt ist die richtige hinzuzufügende Zeile:
target_link_libraries(day_g pq)
Beachten Sie auch, dass Sie sich beim Hinzufügen einer CFLAG auch an die vorherigen “merken” sollten, die möglicherweise von Bibliotheken oder Ihrer Plattform hinzugefügt wurden, dh:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
Um die genauen Flags zu überprüfen, die cmake an den Compiler oder Linker übergibt, können Sie jederzeit im Build-Verzeichnis den folgenden Befehl ausführen:
make VERBOSE=1
Flagge
-l
ist für Linkernicht für Compiler. Dieses Flag wird für die Verknüpfung mit Bibliotheken verwendet. CMake hat einen speziellen Befehl target_link_libraries zu diesem Zweck.– Zywarew
31. März 2017 um 8:59 Uhr
Danke! Addieren
target_link_libraries(day_g pq)
und alles funktioniert gut! Können Sie Ihre Antwort posten, damit ich sie als Antwort markieren kann?– Metal-Evolution-Studio
31. März 2017 um 9:03 Uhr
Sie sind nicht die erste Person, die nach einem bestimmten Problem fragt, aber ich stimme zu, dass andere Fragen nicht leicht zu finden sind. Der Versuch, eine bestimmte Frage zu stellen kanonisch.
– Zywarew
31. März 2017 um 9:12 Uhr