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")
这适用于一切。