Inq*_*ive 7 c++ linker g++ cmake
是否可以使用 CMake 将目标的库包含在--start-group/中--end-group,而无需手动将参数字符串写入target_link_options?
背景:将 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到该变量中包含的所有库。)
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
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3018 次 |
| 最近记录: |