我通过 CMAKE_C_FLAGS 在 CMake 中设置了 CFLAGS。像这样设置LDFLAGS吗?
5 回答
这有点取决于你想要什么:
A) 如果要指定链接到哪些库,可以使用find_library查找库,然后使用link_directories和target_link_libraries到。
当然,编写一个好的find_package脚本通常是值得的,它很好地添加了带有正确位置的add_library( YourLib IMPORTED )的“导入”库,以及平台/构建特定的前缀和后缀。然后,您可以简单地参考“YourLib”并使用 target_link_libraries。
B) 如果您希望指定特定的链接器标志,例如 '-mthreads' 或 '-Wl,--export-all-symbols' 与 MinGW-GCC,您可以使用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
如果您想为每个链接添加一个标志,例如,-fsanitize=address
那么我不建议使用CMAKE_*_LINKER_FLAGS
. 即使它们都设置了,在 OSX 上链接框架时它仍然不使用该标志,也许在其他情况下。而是使用link_libraries()
:
add_compile_options("-fsanitize=address")
link_libraries("-fsanitize=address")
这适用于一切。
您可以在target_link_libraries中指定链接器标志。
有关与库的链接,请参见Andre 的答案。
对于链接器标志 - 以下 4 个 CMake 变量:
CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS
可以使用ucm的ucm_add_linker_flags宏轻松操作不同的配置(调试、发布...)