CMake:在静态库上设置链接器标志,供消费者在链接时使用(Visual Studio)

JPN*_*gon 0 c++ linker cmake visual-c++

我有以下情况:一个静态库MyStaticLib取决于 FFmpeg 项目(libavformat等)的几个库。

FFmpeg 库(不是由我)与“/SAFESEH:NO”选项链接,这意味着链接到它们的任何图像(通过它们的导入库)也必须与相同的选项链接(不这样做会使链接器因“LNK2026:模块对 SAFESEH 图像不安全”而中止)。

我已经尝试了所有我能想到的方法,但是我还没有找到一种方法可以将该选项附加到我的选项MyStaticLib中,从而使其传播给消费者。

这看起来很奇怪,因为 CMake 确实提供了将编译器选项传播给消费者的方法:target_compile_options()与该PUBLIC选项一起使用的命令正是这样做的。

链接器标志没有类似的功能吗?

Ale*_*Che 5

VC++编译器链接器接受正斜杠 (/) 和破折号 (–) 作为选项说明符。因此,您可以使用以下命令将链接器选项添加到 MyStaticLib 目标并将该选项传播到 MyStaticLib 使用者:

target_link_libraries(MyStaticLib PUBLIC "-SAFESEH:NO")
Run Code Online (Sandbox Code Playgroud)

或者如果您的构建配置也支持其他编译器:

target_link_libraries(MyStaticLib PUBLIC "$<$<CXX_COMPILER_ID:MSVC>:-SAFESEH:NO>")
Run Code Online (Sandbox Code Playgroud)