c++ - CMake:自定义工具链:CMAKE_AR 和 CMAKE_CXX_ARCHIVE_CREATE

标签 c++ cmake toolchain build-system

我有一个自定义工具链。我将 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 变量替换。这很奇怪,因为并且似乎是正确的。 我知道我可以通过将其替换为 ar 程序的路径来更改 CMAKE_CXX_ARCHIVE_CREATE,但我还必须更改其他变量。

CMake:3.10.2 操作系统:Windows 10

这似乎是 CMake 中的一个错误。

最佳答案

我发现另一个提到有人对 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) 

关于c++ - CMake:自定义工具链:CMAKE_AR 和 CMAKE_CXX_ARCHIVE_CREATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49763259/

相关文章:

c++ - visual studio 2012 c++ hello world - iostream 不工作

c++ - 为什么我的子窗口对鼠标事件没有反应?

C++ MSVS 项目内链接器错误 LNK2019 - 声明定义不匹配?

visual-studio - CMAKE Cuda/ptx 项目上的重复代码生成标志

c++ - 交叉编译: special cross compiler or just gcc with option -march?

linux - 不支持配置arm-buildroot-linux-gnu

c++ - 更改指针保存地址的变量的值

c++ - C++ 函数相互调用时的 Rcpp 集成

c++ - CMake 中预期的构建失败测试

c++ - Codeblocks 的 Cygwin 编译器不工作