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

在Windows上使用CMake和相对路径创建交叉编译存档(静态库),windows,cmake,static-libraries,cross-compiling,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> $<

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

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

add_custom_target(combined ALL COMMAND ${CMAKE_AR} rc libcombined.a $<TARGET_FILE:target1> $<TARGET_FILE:target2> $<TARGET_FILE:target3>)
如果手动将archiver可执行文件的相对路径替换为绝对路径,则会正确创建新的归档文件。如果我只是在指定的archiver路径中添加引号,也会发生同样的情况

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

因此,我有以下问题:

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

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

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

谢谢,它可以工作。但是,它不会解析任何包含依赖项(就像目标目录对静态库而不是对象所做的那样)。是否使用来指定库的包含项?应该传播的
接口
公共
包括可传递依赖项中指定的目录。
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