CMake 在 .obj 文件后添加链接器选项

CMake add linker options after .obj files

使用 CMake 为嵌入式系统交叉编译可执行文件需要我手动将 link 选项添加到 link libc、libgcc 等等。但是,为此使用 target_link_options 会导致 linker 调用,其中所有这些额外的 link 选项都添加在从我的实际代码生成的所有目标文件的前面。我相信这是错误的 linking 顺序,每当我尝试覆盖标准库中的弱符号(例如 __cxa_pure_virtual)时,它都会导致 "duplicate symbol errors"。

这是我从 linking 阶段

获得的输出示例
"/usr/bin/ld.lld" 
--gc-sections 
/usr/arm-none-eabi/lib/crt0.o 
/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/crti.o 
/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/crtbegin.o 
/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/crtn.o 
/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/crtend.o 
--start-group -lstdc++_nano -lm -lgcc -lc_nano --end-group 
my.obj  ///< Shoudln't object files and application libs be linked first?
libmylib.a
-Bstatic 
-L/usr/lib/clang/10.0.0/lib/baremetal 
-L/usr/arm-none-eabi/lib/thumb/v7e-m+fp/hard/ 
-L/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/ 
-T ldscript.ld
-o myelf

有没有办法在 CMake 中解决这个问题?

target_link_options 指定 linker 的选项 - 通常选项在其他任何内容之前指定。在库中使用 target_link_libraries 到 link。