Comment faire un lien vers la C de la bibliothèque math avec CMake?
Comment puis-je ajouter de la math
bibliothèque de mon fichier CMake? Cette post références de l'ajout d'un cible de bibliothèque de liens, mais je ne suis pas trop familier avec C. Une D'autres post - ce que quelqu'un Pourrait veuillez vous démontrer un exemple. La Documentation Je suis à l'aide de C et j'ai un message d' undefined reference to 'pow'
avec la méthode pow de mathématiques en-tête.
cmake_minimum_required(VERSION 3.3)
project(CSCI-E-28-Unix-Linux-Systems-Programming)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES
CMakeLists.txt
getchar.c
main.cpp
hw0
more01.c)
#target_link_libraries(<math.h> m)
add_executable(main main.cpp)
add_executable(getchar getchar.c)
add_executable(more01 more01.c)
add_executable(argu print_all_arguments.c)
add_executable(chars chars.c)
add_executable(ch4 ch4.c)
Pourquoi avez-vous mis CXX les drapeaux? Ce sont pour le C++, pas C. Et vous n'avez pas défini la langue de votre projet, devrait être
enable_language(C)
.OriginalL'auteur phillipsK | 2016-01-06
Vous devez vous connecter pour publier un commentaire.
De nombreuses fonctions mathématiques (
pow
,sqrt
,fabs
,log
etc.) sont déclarés dansmath.h
et exiger la bibliothèquelibm
à être lié. Contrairement àlibc
, qui est automatiquement lié,libm
est une bibliothèque séparée et souvent nécessite des liens explicites. L'éditeur de liens suppose que toutes les bibliothèques à commencer parlib
, de sorte à relier àlibm
- vous un lien versm
.Vous avez à l'utiliser comme
target_link_libraries(ch4 m)
de lienlibm
à votre cible. Le premier argument doit être une cible. Ainsi, il doit être utilisé aprèsadd_executable(ch4 ch4.c)
comme:Pouvez-vous écrire la bonne réponse? Est
m
un espace réservé? ou c'est juste de la connaissance commune quemath.c
est dans une bibliothèque appeléem
? Ou est-il déclaré dans une manière que je n'ai pas à imaginer dans le script ci-dessus?Génial, je comprends maintenant. Je l'ai lié à une question que j'avais demandé auparavant au sujet de la "libm" devient "m" juste pour être complet.
OriginalL'auteur usr1234567