如何在CMakeLists.txt中设置LDFLAGS?

时间:2011-05-20 20:46:33

标签: gcc makefile cmake ld ldflags

我通过CMAKE_C_FLAGS在CMake中设置CFLAGS。 是这样设置LDFLAGS吗?

5 个答案:

答案 0 :(得分:47)

这取决于你想要的东西:

A)如果要指定要链接的库,可以使用find_library查找库,然后使用link_directoriestarget_link_libraries

当然,编写一个好的find_package脚本通常是值得的,它可以很好地添加带有add_library( YourLib IMPORTED )的“导入”库和正确的位置,以及平台/构建特定的前缀和后缀。然后,您可以简单地引用“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

答案 1 :(得分:20)

看看:

CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS

答案 2 :(得分:5)

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

答案 3 :(得分:5)

如果您想为每个链接添加一个标记,例如-fsanitize=address然后我不建议使用CMAKE_*_LINKER_FLAGS。即使使用它们全部设置它仍然不会在OSX上链接框架时使用标志,也许在其他情况下。而是使用link_libraries()

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

这适用于所有事情。

答案 4 :(得分:4)

有关图书馆的链接,请参阅Andre's answer

对于链接器标志 - 以下4个CMake变量:

CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS

可以使用ucm_add_linker_flags

ucm宏轻松操作不同的配置(调试,发布...)