CMake - это инструмент, предназначенный для определения зависимостей среди целей в вашем приложении.Вы определяете зависимости и устанавливаете языковые требования для ваших целей, и вы просите CMake сгенерировать файлы, которые помогут вам построить ваши цели.Имея это в виду, пожалуйста, не связывайтесь с переменными CMAKE_C(XX)_COMPILER
непосредственно в ваших CMakeLists.txt
, а скорее подумайте об использовании файлов toolchain для определения конкретных свойств компилятора / компоновщика.Используя файлы наборов инструментов, вы можете не только определять различные настройки компилятора / компоновщика для своего хоста, но также выполнять кросс-компиляцию, в которой хост и целевые устройства имеют разную архитектуру.
EDIT. Чтобы использовать локально установленный компилятор gcc
, вам не нужно играть с любой (связанной) переменной внутри вашего файла CMakeLists.txt
.Вместо этого вы должны (пере) определить переменную окружения PATH
, включив в нее соответствующие (т.е. MinGW или Cygwin) двоичные файлы, и выбрать подходящий генератор.Ниже приведен минимальный рабочий пример, основанный на вашем коде.
Предположим, что у вас есть следующая структура каталогов:
.
├── appveyor.yml
├── CMakeLists.txt
└── hello.c
с hello.c
, имеющим содержимое
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Hello world!\n");
return 0;
}
CMakeLists.txt
с содержимым
cmake_minimum_required(VERSION 3.10)
project(hello C)
add_executable(hello hello.c)
и, наконец, appveyor.yml
с следующим
image: Visual Studio 2013
environment:
matrix:
- generator: "Visual Studio 12 2013 Win64"
- generator: "MSYS Makefiles"
before_build:
- IF "%generator%"=="MSYS Makefiles" set PATH=C:\msys64\usr\bin;C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\bin;%PATH%
build_script:
- mkdir build
- cd build
- cmake -G "%generator%" ..
- cmake --build .
after_build:
- IF EXIST Debug cd Debug
- hello.exe
Этот пример успешно построен на AppVeyor с обеими цепями инструментов.Уловка здесь в том, что когда вы выбираете MSYS Makefiles
или MinGW Makefiles
в этом отношении, вы должны определить переменную PATH
, чтобы включить двоичные файлы в цепочку инструментов компилятора.В приведенном выше примере я просто использую пути по умолчанию для виртуальных машин AppVeyor .Еще одна вещь, которую стоит отметить для appveyor.yml
, - это то, что генераторы Visual Studio используют разные (под) каталоги для разных CMAKE_BUILD_TYPE
s.Следовательно, я сначала проверяю наличие каталога Debug
, и если он существует, я переключаюсь на каталог и запускаю hello.exe
.
Я надеюсь, что это отвечает на ваш вопрос.