Wie verlinke ich mit CMake auf die C-Mathematikbibliothek?
Lesezeit: 3 Minuten
PhillipsK
Wie füge ich die hinzu math Bibliothek in meine CMake-Datei? Dieser Beitrag verweist auf das Hinzufügen von a Target-Link-Bibliothekaber ich bin nicht allzu vertraut mit C. Ein zusätzlicher Beitrag – Könnte jemand bitte ein Beispiel demonstrieren. Dokumentation Ich verwende C und erhalte eine undefined reference to 'pow' mit der pow-Methode des Math-Headers.
Warum setzen Sie CXX-Flags? Diese sind für C++, nicht C. Und Sie haben die Sprache für Ihr Projekt nicht definiert, sollte es sein enable_language(C).
– usr1234567
6. Januar 2016 um 8:12 Uhr
usr1234567
Viele mathematische Funktionen (pow, sqrt, fabs, log etc.) sind in deklariert math.h und benötigen die Bibliothek libm verbunden werden. nicht wie libcdie automatisch verknüpft wird, libm ist eine separate Bibliothek und erfordert häufig eine explizite Verknüpfung. Der Linker setzt zunächst alle Bibliotheken voraus libalso zum verlinken libm Sie verlinken m.
Sie müssen es wie verwenden target_link_libraries(ch4 m) verlinken libmzu deinem Ziel. Das erste Argument muss ein Ziel sein. Daher muss es nach verwendet werden add_executable(ch4 ch4.c) wie:
add_executable(ch4 ch4.c)
target_link_libraries(ch4 m)
Es ist überraschend, dass dies für Cygwin unter Windows nicht erforderlich ist. Aber leider wird auf *nix benötigt.
– John Strood
26. Juli 2016 um 18:23 Uhr
Können Sie die vollständige richtige Antwort aufschreiben? Ist m ein Platzhalter? oder ist das nur allgemein bekannt math.c ist in einer Bibliothek namens m? Oder ist es auf eine Weise deklariert, die ich im obigen Skript nicht verstehe?
– Schlitten
17. Januar 2019 um 19:30 Uhr
Super, jetzt verstehe ich es. Ich habe eine Frage verlinkt, die ich zuvor gestellt hatte, wie “libm” nur “m” wird, nur der Vollständigkeit halber.
– Schlitten
18. Januar 2019 um 15:18 Uhr
Bei MSVC führt dies zu folgendem Build-Fehler: [CMake] LINK : fatal error LNK1104: cannot open file 'm.lib'
– Wouter Beek
6. Juli 2019 um 11:14 Uhr
Ich versuche zu bauen GLFW von der Quelle und es gibt keine Linie add_executable in CMakeLists.txt. Was soll ich machen?
– Benutzer2513149
14. Juli 2019 um 14:31 Uhr
Für verschiedene Ziele ist es eine gute Idee zu testen, ob das Hinzufügen einer Bibliothek erforderlich ist oder nicht, und wenn ja, wo sie sich befindet oder wie sie benannt ist. Hier ist eine Möglichkeit, dies zu tun:
:
include(CheckLibraryExists)
CHECK_LIBRARY_EXISTS(m sin "" HAVE_LIB_M)
if (HAVE_LIB_M)
set(EXTRA_LIBS ${EXTRA_LIBS} m)
endif (HAVE_LIB_M)
:
//More tests & build-up of ${EXTRA_LIBS}
:
add_executable(ch4 ch4.c)
target_link_libraries(ch4 PUBLIC ${EXTRA_LIBS})
Für Ziele wo libm ist ein Teil von libcsollte der obige Test fehlschlagen, dh ${EXTRA_LIBS} werde es vermissen u target_link wird nicht versuchen, hinzuzufügen.
14007400cookie-checkWie verlinke ich mit CMake auf die C-Mathematikbibliothek?yes
Warum setzen Sie CXX-Flags? Diese sind für C++, nicht C. Und Sie haben die Sprache für Ihr Projekt nicht definiert, sollte es sein
enable_language(C)
.– usr1234567
6. Januar 2016 um 8:12 Uhr