windows - 在 Windows 上使用 CMake 和相对路径创建交叉编译的存档(静态库)

标签 windows cmake static-libraries cross-compiling

使用 CMake,我能够交叉编译并创建一个依赖于其他静态库的静态库。但是,生成的静态库不包含其他静态库的“内容”。因此,我想创建一个存档,即静态库,它实际上包含所有内容(所有目标文件)。

为此,我尝试在 CMakeLists.txt 中使用以下指令:

add_custom_target(combined ALL COMMAND ${CMAKE_AR} rc libcombined.a $<TARGET_FILE:target1> $<TARGET_FILE:target2> $<TARGET_FILE:target3>)

CMAKE_AR 设置为我的交叉编译器(存档器?)所在的绝对路径;它的值类似于:c:/arm/arm-none-eabi-ar.exe

但是,当我尝试构建项目(make && make install)时,我收到以下错误:

'..' is not recognized as an internal or external command, operable program or batch file. make[2]: *** [src/CMakeFiles/combined] Error 1

如果我打开 src/CMakeFiles/combined 所在的 build.make 文件,我会得到类似的东西:

src/CMakeFiles/combined:
    cd absolute-path-to-the-build-folder/src && ../../relative-path-to-the-archiver-executable/arm-none-eabi-ar.exe rc libcombined.a absolute-path-to-target1-archive absolute-path-to-target2-archive absolute-path-to-target3-archive

如果我用绝对路径手动替换归档程序可执行文件的相对路径,则会正确创建新的归档文件。如果我只是在指定的归档路径中添加引号,也会发生同样的情况。

在这一点上,我认为它可能与 Windows 和/或 make 实用程序有关,它不能正确解释命令/路径。

因此,我有以下问题:

  • 为什么CMAKE_AR值从绝对路径转为相对路径?
  • 如何在不涉及外部脚本的情况下解决这个问题?

关于最后一点,我试图用引号转义 CMAKE_AR 路径,但随后出现错误:“COMMAND 可能不包含文字引号”。

最佳答案

您要做的是创建一个 object library这取决于您的各种静态库,以便获得包含所有依赖项的单个库。

关于windows - 在 Windows 上使用 CMake 和相对路径创建交叉编译的存档(静态库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47183953/

相关文章:

windows - 如何强制特定进程使用代理进行网络通信

c - 在 Windows 上将 select() 与 STDIN 一起使用?

r - 无法安装 R 包 : CMake errorr

c++ - 在 Code::Blocks with Dependencies 中编译

python - 静态库 (.lib) 到 Python 项目

c++ - 将具有外部实现的模板编译为静态库

windows - 将 ASP 经典页面从 Windows 转移到 Linux

windows - 如何以编程方式在 Windows 和任何其他操作系统(moSTLy Linux)之间共享位图图像?

c++ - 如何使用 CMake 处理仅 header 的第三方?

linux - 我可以同时安装库的共享 .so 和静态 .a 版本吗?