如何在CMake中使用`--start-group`和`--end-group`?

5

是否能够在不手动编写参数字符串进入 target_link_options 的情况下,使用 CMake 将目标库封装在 --start-group/--end-group 中?

背景:在将 C++ 可执行文件链接到列表中的库时(使用 g++ 7.5.0),我遇到了库排序问题。我最近了解到,在 gcc/g++ 中有 --start-group--end-group 选项,允许重复搜索存档。我想在使用 CMake 生成我的构建文件时启用这些选项。

给定目标库名称列表(例如 target_link_libraries(myTarget mylibrary1 mylibrary2 ${MY_VARIABLE_LIST_OF_LIBRARIES} ...)),是否可能在不必手动键入参数的情况下将所有库封装在 --start-group/--end-group 中,如target_link_options(myTarget PUBLIC "--start-group -lmylibrary1 -lmylibrary2 ... --end-group")?(我特别想避免追踪 ${MY_VARIABLE_LIST_OF_LIBRARIES}" 的内容以手动添加包含在该变量中的所有库的 -l。)

1个回答

5
CMake 3.24引入了LINK_GROUP生成表达式,允许在target_link_libraries命令中对库进行分组,以添加该组的某些功能。其中一种组功能是RESCAN,它有效地为GNU编译器添加了--start-group/--end-group>。
target_link_libraries(myTarget
  PRIVATE # or any other keyword
  mylibrary1 mylibrary2 # These libraries will be linked normally
  "$<LINK_GROUP:RESCAN,${MY_VARIABLE_LIST_OF_LIBRARIES}>" # These libraries will be grouped
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接