CMake:自定义工具链:CMAKE_AR和CMAKE_CXX_ARCHIVE_CREATE

问题描述 投票:2回答:2

我有一个自定义工具链。我将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中的一个错误。

c++ cmake toolchain build-system
2个回答
0
投票

这都怪我。我在调用cmake时设置了CMAKE_TOOLCHAIN:

cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE=../app/toolchain.cmake ../app

但是我没有在CMakeLists.txt中包含这个toolchain.cmake。我认为设置CMAKE_TOOLCHAIN就足够了。一些变量的变化是可见的,但并非所有变量都是可见的,这很奇怪。


0
投票

我找到了另一个对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) 
© www.soinside.com 2019 - 2024. All rights reserved.