Kann CMake erkennen, ob ich bei Verwendung von pow in C eine Verknüpfung zu libm herstellen muss?
it einigen Compile usingpow
und bestimmte andere Funktionen in einem C-Programm erfordern die Verknüpfung mit demm
Bibliothe. Einige Compiler benötigen dies jedoch nicht und würden beim Verlinken auf das @ -Zeichen einen Fehler machem
Bibliothek. Eine fast identische Situation besteht für C ++ mitstd::thread
undpthread
, aber das CMake-ModulFindThreads
lindert dies vollständig - gibt es ein ähnliches Modul für libm?
Was ist der beste Weg, um herauszufinden, was mit CMake geschehen soll? Dies ist meine derzeitige Lösung, die alles andere als ideal ist, da es viel mehr C-Compiler als nur GCC und MSVC gibt:
if(NOT MSVC)
target_link_libraries(my-c-target PUBLIC m)
endif()
Dies funktioniert für meine Zwecke, aber ich bin mir ziemlich sicher, dass es Fälle gibt, in denen dies fehlschlagen würde und ein manuelles Eingreifen des Benutzers erforderlich ist. Im Idealfall möchte ich nicht, dass der Benutzer angeben muss, ob sein Compiler @ isseltsa oder nicht über die Kommandozeile; Ich möchte es automatisch in CMake erkennen, da dies der gesamte Punkt von CMake ist.