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

时间:2017-11-08 15:47:33

标签: 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&amp;&amp; make install)时,我收到以下错误:

  

'..'不被识别为内部或外部命令,可操作程序或批处理文件。   make [2]:*** [src / CMakeFiles / combined]错误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

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

此时,我认为它可能与Windows和/或make实用程序有关,它无法正确解释命令/路径。

因此,我有以下问题:

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

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

1 个答案:

答案 0 :(得分:1)

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