Wie kann ich eine Flagge am Ende die Verknüpfung Befehlszeile mit CMake?

Ich habe ein Problem, wo CMake kann nicht erkennen pthread -. Als work-around habe ich versucht:

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lpthread")

Allerdings, fügt -lpthread an der falschen Stelle:

/usr/bin/c++    -std=c++11 -D_GNU_SOURCE  -Wall [manyflags ...]    -lpthread \
    CMakeFiles/connectivity_tool.dir/connectivity_tool/conn_tool.cpp.o       \
    -o connectivity_tool -rdynamic -lboost_system [many libraries...]

Diese Ergebnisse, in:

/usr/bin/ld: /tmp/ccNvRifh.ltrans3.ltrans.o: undefined reference to symbol 'pthread_mutexattr_settype@@GLIBC_2.2.5'
/lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line

Natürlich, die -lpthread sollte am Ende der 3. Zeile, nicht das Ende des 1.

Wie kann ich entweder immer CMake hinzufügen -lpthread am Ende dieser Zeile, oder vielleicht sogar das ändern der generierten Makefiles irgendwie in einigen hacky Weg, um diese zu arbeiten?

(Wenn die Antwort beinhaltet eigentlich erkennen pthread richtig dann Antwort auf die verlinkte Frage.)

  • Gibt es irgendwelche zusätzlichen includes, set(CMAKE_EXE_LINKER_FLAGS ...) oder package-Referenzen nach Ihren set()? Beachten Sie auch: Für die aktuellen standards, die Sie sollten nur geben Sie die Globale -pthread option.
  • Es sind, lege ich diese an der Spitze. Lustigerweise, obwohl, mit -pthread es zu arbeiten!
  • Sie müssen diese option (-pthread) für die Zusammenstellung und Verknüpfung der Phasen. Froh, dass es scheint, um Ihre Probleme zu lösen (IMHO linker Automatismus). CMake ist manchmal etwas ungeschickt, um die Dinge in der richtigen Reihenfolge :P. ich habe einen Rückgriff auf die manage my build-Systeme mit machen und die mighty mighty Vorlage erstellen " Bewertung von Funktionen vor kurzem. CMake bietet die gleiche mehr oder weniger, aber ich ' ve wurde schlagen unlösbare Fälle (wie die Einbettung CMake generierten Bibliothek listet in der entsprechenden --start-group/--end-group Paare)
InformationsquelleAutor Claudiu | 2014-07-17
Schreibe einen Kommentar