Как изменить генератор makefile для CMake? - PullRequest
0 голосов
/ 04 мая 2020

Задал этот вопрос: CMake не может идентифицировать путь к компилятору, упомянутый правилом set (CMAKE_C_COMPILER "path") получил неправильный порядок ответа на запрос (он был явно правильным). Применил изменения и попробовал еще раз: cmake . вывод:

-- The C compiler identification is GNU 9.2.0
-- The CXX compiler identification is GNU 9.2.0
-- Check for working C compiler: C:/Strawberry/c/bin/gcc.exe
CMake Error: Generator: execution of make failed. Make command was: nmake /nologo cmTC_fc6d3\fast &&
-- Check for working C compiler: C:/Strawberry/c/bin/gcc.exe - broken

Но мне нужно не nmake, а файл mingw make, нашел эту топи c: Ошибка CMake: выполнение make завершилось неудачно на Windows

У меня проблема 100% та же. Попытка при условии:

Необходимо указать генератор в командной строке CMake, например -G "MakeGiles MinGW" и - в зависимости от того, сколько компиляторов вы установили - также полные пути к компиляторам.

cmake -G "MinGW Makefiles"

output:

CMake Warning:
  No source or binary directory provided.  Both will be assumed to be the
  same as the current working directory, but note that this warning will
  become a fatal error in future CMake releases.


CMake Error: Error: generator : MinGW Makefiles
Does not match the generator used previously: NMake Makefiles
Either remove the CMakeCache.txt file and CMakeFiles directory or choose a different binary directory.

и следующий cmake . вывод дает (после удаления файла CMakeCache.txt и каталога CMakeFiles, как упомянуто выше):

-- The C compiler identification is GNU 9.2.0
-- The CXX compiler identification is GNU 9.2.0
-- Check for working C compiler: C:/Strawberry/c/bin/gcc.exe
CMake Error: CMake was unable to find a build program corresponding to "NMake Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error at C:/Program Files/CMake/share/cmake-3.17/Modules/CMakeTestCCompiler.cmake:44 (try_compile):
  Failed to configure test project build system.
Call Stack (most recent call first):
  CMakeLists.txt:9 (project)


-- Configuring incomplete, errors occurred!
See also "CMakeFiles/CMakeOutput.log".


CMake Error: Generator: execution of make failed. Make command was:  cmTC_4b6e5/fast &&
-- Check for working C compiler: C:/Strawberry/c/bin/gcc.exe - broken

3 вещи, которые я не могу понять:

  1. Как ... указать ... полные пути к компиляторам или необходимые исходный или двоичный каталог .
  2. Почему компиляторы каким-либо образом связаны с make.exe.
  3. Почему CMAKE_MAKE_PROGRAM не устанавливается, если существует правильное правило.

Изменение порядка правил:

set( CMAKE_MAKE_PROGRAM FORCE ) set(CMAKE_C_COMPILER ) set(CMAKE_CXX_COMPILER ) и set(CMAKE_C_COMPILER ) set(CMAKE_CXX_COMPILER ) set( CMAKE_MAKE_PROGRAM FORCE ) имеет тот же результат после вызова.

Если я удаляю set( CMAKE_MAKE_PROGRAM ), то настройка с помощью CMake GUI возможна, но с cmd вызов cmake . вручную не выполняется. Тот же вывод, как указано выше.

Внутри CMakeCache.txt, сгенерированным CMake GUI вызовами являются строки:

//Path to a program.
CMAKE_MAKE_PROGRAM:FILEPATH=C:/Strawberry/c/bin/mingw32-make.exe

, поэтому можно было найти mingw32-make.exe, и путь для ручного вызова также правильный.

Мой CMakeLists.txt:

cmake_minimum_required(VERSION 3.17.1)

#set(CMAKE_MAKE_PROGRAM C:/Strawberry/c/bin/make.exe FORCE )
set( CMAKE_MAKE_PROGRAM C:/Strawberry/c/bin/mingw32-make.exe FORCE )

set(CMAKE_C_COMPILER "C:/Strawberry/c/bin/gcc.exe")
set(CMAKE_CXX_COMPILER "C:/Strawberry/c/bin/g++.exe")

project("Client")

enable_testing()

set(CMAKE_CXX_FLAGS "-std=c++17 " )

add_executable(Client
  main.cpp
  client.cpp
  client.h
  logmsg.cpp
  includes.h
)

target_link_libraries(Client wsock32 ws2_32)

add_test(NAME test COMMAND Client )
...