如何使用CMake链接<math.h>库?

14

我在我的 C 源代码中包含了 <math.h> 库。但是我遇到了编译错误。

Error: 
**undefined reference to 'sqrt'
**undefined reference to 'atan'

我该如何在CMakeLists.txt文件中链接到<math.h>


只是出于好奇 - 如果编译器是gcc,目标系统是Solaris,则可能需要使用编译器选项-lm来静态链接数学库。如果使用gcc,则对于其他目标系统也可能如此。 - Codor
是的,我知道。但我必须在编辑器上构建它。为此,我必须在cmakelists.txt中添加"math.h"。 - SEGV
@usr1234567 不是的,这里没有任何有助于或与SEGV在这里的答案相匹配的内容。这是一个非常晦涩的用法。 - mckenzm
2个回答

30

CMakeLists.txt 文件就像这样:

cmake_minimum_required(VERSION 3.6)
project(project_name)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ")

set(SOURCE_FILES main.c)
add_executable(project_name ${SOURCE_FILES})

你必须添加此命令,用于<math.h>

target_link_libraries(project_name PRIVATE m)

就这些。


1
如果我得到了以下错误信息:"CMakeLists.txt:57 (target_link_libraries) 中的 CMake 错误:无法为未由此项目构建的目标“my_target”指定链接库。",那么我是否漏掉了什么? - m4l490n
这是非标准库,不是吗?可能´target_link_libraries()´命令在标准目录中搜索库,但找不到你的库。也许你可以添加库的完整路径。 - SEGV
你说你的代码是用C写的。我觉得在"-std=c++11"这里会出错。 - undefined

4

CMakeList.txt 中添加以下命令:

target_link_libraries(${PROJECT_NAME} m)

3
嗨@Esmaeill,你看过提问者给出的答案了吗?他们找到了与这个答案基本相同的答案。如果你认为有一些新的见解被提供了,请在原来的答案中更新这个额外的见解。 - Mr R
@MrR 我认为所选答案在 "set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ")" 这一行至少会出现一个错误。看起来用户SEGV混淆了 "gcc"(C代码)和 "g++"(C++代码)编译器。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接