С некоторыми компиляторами, using pow
and certain other functions in a C program requires linking to the m
library. Однако некоторые компиляторы не требуют этого и будут ошибаться при подключении к библиотеке m
. Почти такая же ситуация существует для C++ с std::thread
и pthread
, но модуль CMake FindThreads
полностью устраняет это - есть ли какой-то подобный модуль для libm?Может ли CMake определить, нужно ли мне ссылаться на libm при использовании pow в C?
Каков наилучший способ определить, что делать с CMake? Это мое текущее решение, которое меньше, чем идеал, потому что есть много других компиляторов C, чем просто GCC и MSVC:
if(NOT MSVC)
target_link_libraries(my-c-target PUBLIC m)
endif()
Это работает для моих целей, но я уверен, что есть случаи, когда оно не будет и требуют ручного вмешательства пользователя, что не является забавой для тех, кто не знает об этой безвестности. В идеале я не хочу, чтобы пользователь должен был указать, является ли их компилятор weird или нет через командную строку; Я хочу автоматически обнаружить его в CMake, так как это весь смысл CMake.
«* некоторые компиляторы не требуют этого и будет ошибка на ссылки на м библиотеки *» Какой из, пожалуйста? – alk
@alk Я работал с неясным компилятором C для робота-микроконтроллера, который, как я знаю, не поддерживает '-lm', потому что это была первая ошибка, которую я когда-либо получал от этого компилятора. Не исключено, что мой конкретный код будет использован в таком сценарии. –