【发布时间】:2015-12-25 07:41:42
【问题描述】:
对于某些编译器,using pow and certain other functions in a C program requires linking to the m library。但是,一些编译器不需要这样做,并且在链接到 m 库时会出错。使用std::thread 和pthread 的C++ 存在几乎相同的情况,但CMake 模块FindThreads 完全缓解了这种情况——libm 是否有一些类似的模块?
检测如何使用 CMake 的最佳方法是什么?这是我目前的解决方案,它不太理想,因为 C 编译器不仅仅是 GCC 和 MSVC:
if(NOT MSVC)
target_link_libraries(my-c-target PUBLIC m)
endif()
这适用于我的目的,但我很确定在某些情况下它会失败并需要手动用户干预,这对于不了解这种默默无闻的人来说并不好玩。理想情况下,我不希望用户必须通过命令行指定他们的编译器是否为weird;我想在 CMake 中自动检测它,因为这是 CMake 的全部意义所在。
【问题讨论】:
-
"一些编译器不需要这个,并且在链接到 m 库时会出错" 请问是哪一个?
-
@alk 我为机器人微控制器使用了一个不起眼的 C 编译器,我知道它不支持
-lm,因为这是我从该编译器得到的第一个错误。在这种情况下使用我的特定代码并非不可能。 -
@alk 在使用 Visual Studio 编译器 v16 时,使用 CMake 的
target_link_libraries(MY_TARGET m)设置libm时出现链接错误。