Я пытаюсь создать простое приложение на машине с Windows, используя CMake в качестве основного инструмента сборки. После вызова CMake в проекте возникает ошибка на этапе настройки:
> cmake -H. -G Ninja -Bbuild -DCMAKE_C_COMPILER:PATH="C:\Program Files\LLVM\bin\clang-cl.exe" -DCMAKE_CXX_COMPILER:PATH="C:\Program Files\LLVM\bin\clang-cl.exe"
-- The C compiler identification is Clang 7.0.0
-- The CXX compiler identification is Clang 7.0.0
-- Check for working C compiler: C:/Program Files/LLVM/bin/clang-cl.exe
-- Check for working C compiler: C:/Program Files/LLVM/bin/clang-cl.exe --broken
CMake Error at C:/Program Files/CMake/share/cmake-3.12/Modules/CMakeTestCCompile
r.cmake:52 (message):
The C compiler
"C:/Program Files/LLVM/bin/clang-cl.exe"
is not able to compile a simple test program.
It fails with the following output:
Change Dir: C:/Users/mak/Desktop/cmake-test/build/CMakeFiles/CMakeTmp
Run Build Command:"C:/Qt/Tools/QtCreator/bin/ninja.exe" "cmTC_f5485"
[1/2] Building C object CMakeFiles\cmTC_f5485.dir\testCCompiler.c.obj
[2/2] Linking C executable cmTC_f5485.exe
FAILED: cmTC_f5485.exe
cmd.exe /C "cd . && "C:\Program Files\CMake\bin\cmake.exe" -E vs_link_exe --intdir=CMakeFiles\cmTC_f5485.dir --manifests -- CMAKE_LINKER-NOTFOUND /nologo CMakeFiles\cmTC_f5485.dir\testCCompiler.c.obj /out:cmTC_f5485.exe /implib:cmTC_f5485.lib /pdb:cmTC_f5485.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."
RC Pass 1: command "rc /foCMakeFiles\cmTC_f5485.dir/manifest.res CMakeFiles\cmTC_f5485.dir/manifest.rc" failed (exit code 0) with the following output:
The system cannot find the given file
ninja: build stopped: subcommand failed.
CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:3 (project)
Я много читал в Интернете, но моя проблема не была решена никаким предложенным решением. То, что я нашел до сих пор, является похожим, но, возможно, устаревшим решением к той же проблеме, которая не сработала для меня, потому что Ninja не смог построить исполняемый файл:
> ninja all
[1/2] Building CXX object CMakeFiles/minimal.dir/main.cpp.obj
FAILED: CMakeFiles/minimal.dir/main.cpp.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe -MD -MT CMakeFiles/minimal.dir/main.cpp.obj -MF CMakeFiles\minimal.dir\main.cpp.obj.d -o CMakeFiles/minimal.dir/main.cpp.obj -c ../main.cpp
clang-cl.exe: warning: unknown argument ignored in clang-cl: '-MF' [-Wunknown-argument]
clang-cl.exe: error: no such file or directory: 'CMakeFiles/minimal.dir/main.cpp.obj'
clang-cl.exe: error: no such file or directory: 'CMakeFiles\minimal.dir\main.cpp.obj.d'
ninja: build stopped: subcommand failed.
Перед этой ошибкой CMake настроен правильно, за исключением того, что обнаружение информации ABI всех компиляторов не удалось, но CMake возобновил работу без ошибок. Есть некоторые другие вопросы, которые тоже не помогли.
В официальной документации говорится, что это довольно просто, но на самом деле это не так.
Итак: Как мне создать простой C ++ проект, используя CMake с генератором Ninja и Clang в качестве компилятора? Я стараюсь избегать установки Visual Studio, но было бы здорово, если бы сгенерированные двоичные файлы были совместимы с двоичными файлами сборки MSVC.
Версии:
- CMake 3.12.2
- Ниндзя 1.8.2
- Clang 7.0.0
Пример. Вот небольшой пример, с которым я работаю:
CMakeLists.txt
cmake_minimum_required(VERSION 3.12)
project(minimal)
add_executable(${PROJECT_NAME} main.cpp)
main.cpp
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
rc
служебной программой. Кроме того,CMAKE_LINKER-NOTFOUND
означает, что CMake не удалось обнаружить компоновщик. - person Tsyvarev   schedule 11.10.2018CMAKE_LINKER
эта переменная устанавливается вCMAKE_LINKER-NOTFOUND
, как только я запускаю конфигурацию (что из-за этого терпит неудачу). Как правильно установить линкер? - person maxik   schedule 16.10.2018CMAKE_<LANG>_CREATE_SHARED_LIBRARY
для общей библиотеки,CMAKE_<LANG>_CREATE_SHARED_MODULE
для библиотеки модулей). Может быть, некоторые скрипты обнаружения компилятора намекают на компоновщик, но я не знаю об этом. Собственно, сейчас я не уверен, чтоCMAKE_LINKER-NOTFOUND
сигнализирует о проблеме. - person Tsyvarev   schedule 16.10.2018