在 Windows 和相对路径上使用 CMake 创建交叉编译的存档(静态库)
Creating cross-compiled archive (static library) using CMake on Windows and relative path
使用 CMake,我能够交叉编译并创建一个依赖于其他静态库的静态库。但是,生成的静态库不包含其他静态库的 "content"。因此,我想创建一个存档,即静态库,它实际上包含所有内容(所有目标文件)。
为此,我尝试在 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
如果我打开 build.make 文件,其中 src/CMakeFiles/combined 是,我有类似的东西:
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 and/or 相关,因为 make 实用程序无法正确解释 command/path.
因此,我有以下问题:
- 为什么CMAKE_AR值从绝对路径转为相对路径?
- 如何在不涉及外部脚本的情况下解决这个问题?
关于最后一点,我试图用引号对 CMAKE_AR 路径进行转义,但随后出现错误:"COMMAND may not contain literal quotes".
您要做的是创建一个依赖于各种静态库的 object library,以便获得包含所有依赖项的单个库。
使用 CMake,我能够交叉编译并创建一个依赖于其他静态库的静态库。但是,生成的静态库不包含其他静态库的 "content"。因此,我想创建一个存档,即静态库,它实际上包含所有内容(所有目标文件)。
为此,我尝试在 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
如果我打开 build.make 文件,其中 src/CMakeFiles/combined 是,我有类似的东西:
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 and/or 相关,因为 make 实用程序无法正确解释 command/path.
因此,我有以下问题:
- 为什么CMAKE_AR值从绝对路径转为相对路径?
- 如何在不涉及外部脚本的情况下解决这个问题?
关于最后一点,我试图用引号对 CMAKE_AR 路径进行转义,但随后出现错误:"COMMAND may not contain literal quotes".
您要做的是创建一个依赖于各种静态库的 object library,以便获得包含所有依赖项的单个库。