So fügen Sie das Compiler-Flag “-l” (ell) in CMake hinzu

Lesezeit: 3 Minuten

So fugen Sie das Compiler Flag l ell in CMake hinzu
Metal-Evolution-Studio

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.

    – 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


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)

  • das hat bei mir auch gut funktioniert, mit GSL-Bibliotheken. Um jedoch arbeiten zu können, müssen Sie die stornieren set(CMAKE_CXX_FLAGS "-lpq") und das add_definitions(-lpq) aus dem vorherigen Beispiel.

    – Duccio Piovani

    23. April 2018 um 9:16 Uhr

  • @DuccioPiovani: Die Frage beschreibt die richtige Art der Verknüpfung. Dies impliziert, dass andere Verknüpfungsversuche (via CMAKE_CXX_FLAGS oder add_definitions) werden nicht benötigt.

    – Zywarew

    23. April 2018 um 9:29 Uhr

  • Ich stehe jetzt vor dem gleichen Problem, aber während ich versuche, ein Python-Paket mit pybind11 und CMakelists.txt zu erstellen. In diesem Fall ist der Befehl add_executable nicht vorhanden und daher kann ich den nicht verwenden target_link_libraries(), weil es keine ausführbare Datei gibt, um es zu verknüpfen. Haben Sie irgendwelche Vorschläge in diesem Fall?

    – Duccio Piovani

    23. April 2018 um 9:33 Uhr


  • @DuccioPiovani: Ich bin kein Experte für die Verwendung von pybind11. Du hast gesagt, es gibt keine add_executable Der Befehl ist vorhanden, aber es könnte ein anderer pybind11-spezifischer Befehl sein, der eine ausführbare Datei erstellt. Höchstwahrscheinlich erstellt dieser Befehl eine ausführbare Datei Ziel, die Sie wie gewohnt mit einer Bibliothek verknüpfen können. Ich empfehle Ihnen, sich vorzubereiten neue Frage: Dort können Sie weitere Details angeben (zB Ihre CMakeLists.txt Code). Wenn Sie die aktuelle Frage/Antwort für Ihre neue Frage nützlich finden, können Sie Ihrer Frage einen entsprechenden Link hinzufügen.

    – Zywarew

    23. April 2018 um 9:42 Uhr

  • Danke, werde ich gleich machen.

    – Duccio Piovani

    23. April 2018 um 9:43 Uhr

-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

998280cookie-checkSo fügen Sie das Compiler-Flag “-l” (ell) in CMake hinzu

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy