CMake:自定义工具链:CMAKE_AR 和 CMAKE_CXX_ARCHIVE_CREATE
Posted
技术标签:
【中文标题】CMake:自定义工具链:CMAKE_AR 和 CMAKE_CXX_ARCHIVE_CREATE【英文标题】:CMake: custom toolchain: CMAKE_AR and CMAKE_CXX_ARCHIVE_CREATE 【发布时间】:2018-09-20 15:23:49 【问题描述】:我有一个自定义工具链。我将 CMAKE_AR 变量设置为正确的 ar 程序的路径。但是,当我构建一个静态库时,我遇到了错误:
cmd.exe /C "cd . && "C:\Program Files (x86)\CMake\bin\cmake.exe" -E remove Library\libLibrary.a && "" qc Library\libLibrary.a Library/CMakeFiles/Library.dir/src/Library.cpp.obj && cd ."
'""' is not recognized as an internal or external command,
如果我没记错的话,CMake 正在使用 CMAKE_CXX_ARCHIVE_CREATE 变量来创建库。它的默认值为:
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
(https://github.com/Kitware/CMake/blob/v3.10.3/Modules/CMakeCXXInformation.cmake) 问题是该部分没有被 CMAKE_AR 变量替换。这很奇怪,因为而且似乎是正确的。 我知道我可以通过将 CMAKE_CXX_ARCHIVE_CREATE 替换为 ar 程序的路径来更改它,但我还必须更改其他变量。
CMake:3.10.2 操作系统:Windows 10
这似乎是 CMake 中的一个错误。
【问题讨论】:
您没有显示如何在您的工具链中设置 CMAKE_AR 变量。另请参阅my answer。 在使用 cmake 3.13.2 在命令行上传递-DCMAKE_AR=$AR
时相同 - 你介意在 gitlab.kitware.com/cmake/cmake/issues 中打开一个错误吗?我没有使用工具链,而是自定义 CMAKE_OSX_SYSROOT
我在使用 cmake 3.10.2 时遇到了完全相同的问题。我在工具链文件中设置了 CMAKE_AR。我还将我的 c 和 c++ 编译器设置在同一个工具链文件中。可以找到具有正确路径的编译器。 ar 命令在生成的 Makefile 中保留为“”(空白),导致 try_compile() 失败。 SET(CMAKE_AR "x86_64-w64-mingw32-ar") SET(CMAKE_C_COMPILER "x86_64-w64-mingw32-gcc")
【参考方案1】:
这是我的错。 我在调用 cmake 时设置了 CMAKE_TOOLCHAIN:
cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE=../app/toolchain.cmake ../app
但是我没有在 CMakeLists.txt 中包含这个 toolchain.cmake。我认为设置 CMAKE_TOOLCHAIN 就足够了。一些变量的变化是可见的,但不是全部可见,这很奇怪。
【讨论】:
【参考方案2】:我发现另一个人对 CMAKE_AR here 有问题的参考。他们提到它只有在值被缓存时才有效。我尝试在我的工具链文件中添加缓存设置并且它有效。请注意,只有 CMAKE_AR 的值需要被缓存,而不是编译器的值。似乎是 CMake 中的一个错误。
SET(CMAKE_C_COMPILER "x86_64-w64-mingw32-gcc")
SET(CMAKE_CXX_COMPILER "x86_64-w64-mingw32-g++")
SET(CMAKE_FORTRAN_COMPILER "x86_64-w64-mingw32-gfortran")
SET(CMAKE_AR "x86_64-w64-mingw32-ar" CACHE FILEPATH "" FORCE)
【讨论】:
以上是关于CMake:自定义工具链:CMAKE_AR 和 CMAKE_CXX_ARCHIVE_CREATE的主要内容,如果未能解决你的问题,请参考以下文章