在Windows和相对path上使用CMake创build交叉编译的存档(静态库)

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

为了达到这个目的,我试着在CMakeLists.txt中使用下面的指令:

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

CMAKE_AR被设置为我的交叉编译器(归档器?)的绝对path; 它的值是这样的:c:/arm/arm-none-eabi-ar.exe

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

“..”不被识别为内部或外部命令,可操作程序或batch file。 make [2]:*** [src / CMakeFiles / combined]错误1

如果我打开src / CMakeFiles /组合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 

如果手动使用绝对path将相对pathreplace为存档程序可执行文件,则新的存档将被正确创build。 如果我只是在指定的归档path中添加引号,则会发生同样的情况。

在这一点上,我认为这可能是Windows和/或不能正确解释命令/path的make实用程序。

因此,我有以下问题:

  • 为什么CMAKE_AR值从绝对path转换为相对path?
  • 我如何解决这个问题,而不涉及外部脚本?

关于最后一点,我试图用引号转义CMAKE_ARpath,但后来我得到错误:“命令可能不包含文字引号”。

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