O CMake pode detectar se eu preciso vincular à libm ao usar o pow em C?
Com alguns compiladores,usandopow
e certas outras funções em um programa C requerem vinculação aom
biblioteca. No entanto, alguns compiladores não exigem isso e podem ter um erro ao vincular aom
biblioteca. Existe uma situação quase idêntica para C ++ comstd::thread
epthread
, mas o módulo CMakeFindThreads
alivia isso inteiramente - existe algum módulo semelhante para o libm?
Qual é a melhor maneira de detectar o que fazer com o CMake? Esta é a minha solução atual, que é menos que o ideal, porque há muito mais compiladores C do que apenas o GCC e o MSVC:
if(NOT MSVC)
target_link_libraries(my-c-target PUBLIC m)
endif()
Isso funciona para meus propósitos, mas tenho certeza de que há casos em que isso falharia e exigiria intervenção manual do usuário, o que não é divertido para quem não conhece essa obscuridade. Idealmente, não quero que o usuário precise especificar se o compilador éesquisito ou não através da linha de comando; Quero detectá-lo automaticamente no CMake, pois esse é o objetivo do CMake.