CMake:如何在CMakeLists.txt中设置LDFLAGS?

我通过CMAKE_C_FLAGS在CMake中设置了CFLAGS。 像这样设置LDFLAGS?

这取决于你想要的东西:

A)如果要指定要链接到的库,可以使用find_library查找库,然后使用link_directories和target_link_libraries 。

当然,编写一个好的find_package脚本通常是值得的,这个脚本很好地添加了带有正确位置的add_library(YourLib IMPORTED)的 “导入”库,以及平台/构build特定的前缀和后缀。 然后,您可以简单地引用“YourLib”并使用target_link_libraries。

B)如果您希望使用MinGW-GCC指定特定的链接器标记,例如“-mthreads”或“-Wl, – export-all-symbols”,则可以使用CMAKE_EXE_LINKER_FLAGS 。 对于模块,共享或静态库,还有两个类似但未公开的标志:

CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS CMAKE_STATIC_LINKER_FLAGS 

看着:

 CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS CMAKE_STATIC_LINKER_FLAGS 

您可以在target_link_libraries中指定链接器标志。

为了链接图书馆,请参阅安德烈的答案 。

对于链接器标志 – 以下4个CMakevariables:

 CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS CMAKE_STATIC_LINKER_FLAGS 

可以使用ucm的ucm_add_linker_flagsmacros轻松地对不同的configuration(debug,release …)进行操作

如果你想为每个链接添加一个标志,例如-fsanitize=address那么我不会推荐使用CMAKE_*_LINKER_FLAGS 。 即使有了它们,在OSX上连接一个框架,或者在其他情况下,它们仍然不会使用该标志。 改用link_libraries()

 add_compile_options("-fsanitize=address") link_libraries("-fsanitize=address") 

这适用于一切。