gpt4 book ai didi

g++ - 如何使用 cmake 将编译器命令行参数放在特定位置

转载 作者:行者123 更新时间:2023-12-01 18:12:56 27 4
gpt4 key购买 nike

所以我正在用两个静态库构建一个共享库。

This answer说的方法是在我的静态库之前插入 -Wl,--whole-archive ,在它们之后插入 -Wl,--no-whole-archive

所以我目前在 cmake 中的共享库是:

add_library(wittyPlus SHARED empty.cpp)
target_link_libraries(wittyPlus
${wtdbosqlite}
${WT_LIBRARIES}
${DB_LIBRARIES}
${Boost_LIBRARIES}
app models
)

所以我需要的是在 appmodels 之前添加 -Wl,--whole-archive,然后 -Wl,--no-whole-archive 在它们之后(这样标准库导入就不会被共享库导出)。

在 CMake 中执行此操作的最简单方法是什么?

<小时/>

补充:所以我想尽可能多地使用标准的 cmake 东西,这样我就不必为 Windows 构建做任何额外的工作,因为 CMake 友好地删除了编译器正在构建的平台不支持定义。

最佳答案

好吧,这比我想象的要容易得多。

所以根据cmake docs :

Item names starting with '-', but not '-l' or '-framework', are treated as linker flags.

所以解决办法就是:

add_library(wittyPlus SHARED empty.cpp)
target_link_libraries(wittyPlus
${wtdbosqlite}
${WT_LIBRARIES}
${DB_LIBRARIES}
${Boost_LIBRARIES}
"-Wl,--whole-archive"
app models
"-Wl,--no-whole-archive"
)

我不知道它是否能在 Windows 上运行,我希望它能运行,因为 cmake 非常聪明。

用 objdump 查看结果,导出中似乎确实有很多 boost 的东西,所以我可能做错了什么。

objdump -C -t wittyPlus/libwittyPlus.so | grep -i boost

但它确实有我需要链接的东西,所以这是向前迈出的一步。

任何其他答案仍然值得赞赏。基本上我想做的与这个问题相同:

CMake: how create a single shared library from all static libraries of subprojects?

关于g++ - 如何使用 cmake 将编译器命令行参数放在特定位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14347107/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com