Как связать C математическую библиотеку с CMake?

Как добавить math библиотеку в мой файл CMake? Этот пост ссылается на добавление целевой библиотеки ссылок, но я не слишком знаком с C. Дополнительная запись - Может кто-нибудь продемонстрирует пример. Документация Я использую C и получаю undefined reference to 'pow' с помощью метода pow математического заголовка.

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)

Ответ 1

Многие математические функции (pow, sqrt, fabs, log и т.д.) Объявлены в math.h и требуют, чтобы библиотека libm была связана. В отличие от libc, который автоматически связывается, libm является отдельной библиотекой и часто требует явного связывания. Компоновщик предполагает, что все библиотеки начинаются с lib, поэтому для ссылки на libm вы libm на m.

Вы должны использовать его как target_link_libraries(ch4 m) чтобы связать libm с вашей целью. Первый аргумент должен быть целью. Таким образом, он должен использоваться после add_executable(ch4 ch4.c) например:

add_executable(ch4 ch4.c)
target_link_libraries(ch4 m)