c - 在 Windows 和 Linux 上的 CMake 文件中链接数学库

标签 c windows visual-studio cmake

我已经能够编写一个 CMakeLists.txt 文件,该文件能够在 Linux 上构建我的 C 项目,但是,在 Windows 上构建该项目时我遇到了很多麻烦。 cmake .. 调用成功,并生成 Visual Studio 2017 项目文件,但构建随后无法定位: 错误 LNK1104 无法打开文件“m.lib”。在 CMakeLists.txt 文件中,我使用 target_link_libraries(MY_EXECUTABLE m) 尝试链接数学库,该库适用于 Linux,但在 Windows 上会出现上述错误。经过一些研究,在我看来,数学是由 Windows 上的 mscvr 库处理的,而不是像 Linux 上的 libm 处理的,但我不确定如何配置 CMake 文件,以便我可以在两个操作系统上进行构建。

有人知道如何设置它以便能够在两种环境中构建吗?

最佳答案

Visual Studio 不需要也不希望您显式请求链接数学库。在为 Windows 构建时,必须避免将其添加为链接库。那么,您可以使用:

,而不是无条件地执行 target_link_libraries(MY_EXECUTABLE m)
IF (NOT WIN32)
  target_link_libraries(MY_EXECUTABLE m)
ENDIF()

关于c - 在 Windows 和 Linux 上的 CMake 文件中链接数学库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54935559/

相关文章:

c - 在 C 中使用管道和 fork 重定向标准输出

git - 子模块 git visual studio "fatal: unexpected sequence in commit output"他们可以 checkin 吗?

visual-studio - Visual Studio 对 TypeScript 文件的隐式引用应该如何工作?

Windows 应用程序无法访问某些网络的服务,但浏览器可以

c++ - C1189 : #error : WINDOWS. H 已经包括在内。 MFC 应用程序不得#include <windows.h>

c++ - DLL 共享数据的推荐方式是什么?

visual-studio - Visual Studio : Is there a keyboard shortcut for search in the current line?

c++ - 操作 c=a+++b 是什么意思?

c++ - 有没有感觉 c++ 有时会减少解决问题的时间并增加句法、语义的严谨性?

c - GValue 初始化/终结的必要性