CMake игнорирует $ CC и $ CXX? - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь скомпилировать OpenCV из исходного кода в Windows 10, потому что я подумал, что это способ включить модуль сопоставления поверхностей в библиотеку. Я пытался следовать инструкциям по установке здесь , но когда я пытаюсь выполнить installOCV.sh изнутри gitbash, как описано выше, он терпит неудачу на полпути, когда CMake пытается протестировать компиляцию с компилятором C и C ++. Вывод скрипта такой:

$ ./installOCV.sh
Already up to date.
Current branch master is up to date.
Already up to date.
Current branch master is up to date.
/c/lib/Build/opencv /c/lib
-- Selecting Windows SDK version  to target Windows 10.0.17134.
-- The CXX compiler identification is unknown
-- The C compiler identification is unknown
CMake Error at CMakeLists.txt:131 (project):
  No CMAKE_CXX_COMPILER could be found.

CMake Error at CMakeLists.txt:131 (project):
  No CMAKE_C_COMPILER could be found.

-- Configuring incomplete, errors occurred!
See also "C:/lib/Build/opencv/CMakeFiles/CMakeOutput.log".
See also "C:/lib/Build/opencv/CMakeFiles/CMakeError.log".

и CMakeError.log отображает следующее (извините, немецкий):

Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" failed.
Compiler:  
Build flags: 
Id flags:  

The output was:
1
Microsoft (R)-Buildmodul, Version 14.0.25420.1
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.

Der Buildvorgang wurde am 18.01.2019 15:09:13 gestartet.
Projekt "C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdCXX\CompilerIdCXX.vcxproj" auf Knoten "1" (Standardziele).
PrepareForBuild:
  Das Verzeichnis "Debug\" wird erstellt.
  Das Verzeichnis "Debug\CompilerIdCXX.tlog\" wird erstellt.
InitializeBuildStatus:
  "Debug\CompilerIdCXX.tlog\unsuccessfulbuild" wird erstellt, da "AlwaysCreate" angegeben wurde.
ClCompile:
  CL.exe /c /nologo /W0 /WX- /Od /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\\" /Fd"Debug\vc140.pdb" /Gd /TP /errorReport:queue CMakeCXXCompilerId.cpp
  TRACKER : Fehler TRK0005: Fehler beim Suchen von "CL.exe". Das System kann die angegebene Datei nicht finden.


C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(356,5): error MSB6006: "CL.exe" wurde mit dem Code 5 beendet. [C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdCXX\CompilerIdCXX.vcxproj]
Die Erstellung des Projekts "C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdCXX\CompilerIdCXX.vcxproj" ist abgeschlossen (Standardziele) -- FEHLER.

Fehler beim Buildvorgang.

"C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdCXX\CompilerIdCXX.vcxproj" (Standardziel) (1) ->
(ClCompile Ziel) -> 
  C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(356,5): error MSB6006: "CL.exe" wurde mit dem Code 5 beendet. [C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdCXX\CompilerIdCXX.vcxproj]

    0 Warnung(en)
    1 Fehler

Verstrichene Zeit 00:00:00.26


Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" failed.
Compiler:  
Build flags: 
Id flags:  

The output was:
1
Microsoft (R)-Buildmodul, Version 14.0.25420.1
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.

Der Buildvorgang wurde am 18.01.2019 15:09:14 gestartet.
Projekt "C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdCXX\CompilerIdCXX.vcxproj" auf Knoten "1" (Standardziele).
PrepareForBuild:
  Das Verzeichnis "Debug\" wird erstellt.
  Das Verzeichnis "Debug\CompilerIdCXX.tlog\" wird erstellt.
InitializeBuildStatus:
  "Debug\CompilerIdCXX.tlog\unsuccessfulbuild" wird erstellt, da "AlwaysCreate" angegeben wurde.
ClCompile:
  CL.exe /c /nologo /W0 /WX- /Od /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\\" /Fd"Debug\vc140.pdb" /Gd /TP /errorReport:queue CMakeCXXCompilerId.cpp
  TRACKER : Fehler TRK0005: Fehler beim Suchen von "CL.exe". Das System kann die angegebene Datei nicht finden.


C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(356,5): error MSB6006: "CL.exe" wurde mit dem Code 5 beendet. [C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdCXX\CompilerIdCXX.vcxproj]
Die Erstellung des Projekts "C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdCXX\CompilerIdCXX.vcxproj" ist abgeschlossen (Standardziele) -- FEHLER.

Fehler beim Buildvorgang.

"C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdCXX\CompilerIdCXX.vcxproj" (Standardziel) (1) ->
(ClCompile Ziel) -> 
  C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(356,5): error MSB6006: "CL.exe" wurde mit dem Code 5 beendet. [C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdCXX\CompilerIdCXX.vcxproj]

    0 Warnung(en)
    1 Fehler

Verstrichene Zeit 00:00:00.26


Compiling the C compiler identification source file "CMakeCCompilerId.c" failed.
Compiler:  
Build flags: 
Id flags:  

The output was:
1
Microsoft (R)-Buildmodul, Version 14.0.25420.1
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.

Der Buildvorgang wurde am 18.01.2019 15:09:14 gestartet.
Projekt "C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdC\CompilerIdC.vcxproj" auf Knoten "1" (Standardziele).
PrepareForBuild:
  Das Verzeichnis "Debug\" wird erstellt.
  Das Verzeichnis "Debug\CompilerIdC.tlog\" wird erstellt.
InitializeBuildStatus:
  "Debug\CompilerIdC.tlog\unsuccessfulbuild" wird erstellt, da "AlwaysCreate" angegeben wurde.
ClCompile:
  CL.exe /c /nologo /W0 /WX- /Od /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\\" /Fd"Debug\vc140.pdb" /Gd /TC /errorReport:queue CMakeCCompilerId.c
  TRACKER : Fehler TRK0005: Fehler beim Suchen von "CL.exe". Das System kann die angegebene Datei nicht finden.


C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(356,5): error MSB6006: "CL.exe" wurde mit dem Code 5 beendet. [C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdC\CompilerIdC.vcxproj]
Die Erstellung des Projekts "C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdC\CompilerIdC.vcxproj" ist abgeschlossen (Standardziele) -- FEHLER.

Fehler beim Buildvorgang.

"C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdC\CompilerIdC.vcxproj" (Standardziel) (1) ->
(ClCompile Ziel) -> 
  C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(356,5): error MSB6006: "CL.exe" wurde mit dem Code 5 beendet. [C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdC\CompilerIdC.vcxproj]

    0 Warnung(en)
    1 Fehler

Verstrichene Zeit 00:00:00.28


Compiling the C compiler identification source file "CMakeCCompilerId.c" failed.
Compiler:  
Build flags: 
Id flags:  

The output was:
1
Microsoft (R)-Buildmodul, Version 14.0.25420.1
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.

Der Buildvorgang wurde am 18.01.2019 15:09:15 gestartet.
Projekt "C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdC\CompilerIdC.vcxproj" auf Knoten "1" (Standardziele).
PrepareForBuild:
  Das Verzeichnis "Debug\" wird erstellt.
  Das Verzeichnis "Debug\CompilerIdC.tlog\" wird erstellt.
InitializeBuildStatus:
  "Debug\CompilerIdC.tlog\unsuccessfulbuild" wird erstellt, da "AlwaysCreate" angegeben wurde.
ClCompile:
  CL.exe /c /nologo /W0 /WX- /Od /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\\" /Fd"Debug\vc140.pdb" /Gd /TC /errorReport:queue CMakeCCompilerId.c
  TRACKER : Fehler TRK0005: Fehler beim Suchen von "CL.exe". Das System kann die angegebene Datei nicht finden.


C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(356,5): error MSB6006: "CL.exe" wurde mit dem Code 5 beendet. [C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdC\CompilerIdC.vcxproj]
Die Erstellung des Projekts "C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdC\CompilerIdC.vcxproj" ist abgeschlossen (Standardziele) -- FEHLER.

Fehler beim Buildvorgang.

"C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdC\CompilerIdC.vcxproj" (Standardziel) (1) ->
(ClCompile Ziel) -> 
  C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(356,5): error MSB6006: "CL.exe" wurde mit dem Code 5 beendet. [C:\lib\Build\opencv\CMakeFiles\3.13.3\CompilerIdC\CompilerIdC.vcxproj]

    0 Warnung(en)
    1 Fehler

Verstrichene Zeit 00:00:00.27

Очевидно, что ни $CC, ни $CXX не приняты во внимание CMake, хотя они существуют:

$ echo $CC
c:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Tools/MSVC/14.11.25503/bin/Hostx64/x64/cl.exe

mark@zws103 MINGW64 /c/lib
$ echo $CXX
c:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Tools/MSVC/14.11.25503/bin/Hostx64/x64/cl.exe

PS: конечно, могут быть некоторые проблемы с пробелами в именах файлов, но я попробовал gcc с путем без пробелов, и результат был буквально таким же.

$ $CC
bash: c:/Program: No such file or directory

mark@zws103 MINGW64 /c/lib
$ "$CC"
Microsoft (R) C/C++-Optimierungscompiler Version 19.11.25508.2 f¦r x64
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.

Syntax: cl [ Option... ] Dateiname... [ /link Linkeroption... ]

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Попробуйте скачать компиляторы C и C ++ через MinGW. Файлы будут называться gcc.exe и g ++. Exe для C и C ++ соответственно. Добавьте их в переменную пути среды и затем запустите файл оболочки.

Надеюсь, это поможет!

0 голосов
/ 18 января 2019

CMake - это двухэтапный процесс. Первый шаг создает набор make-файлов или файлов проекта, которые могут использоваться компилятором. В этом случае вы хотите создать файлы проекта MS Visual Studio.

Основные команды CMake:

cmake <path to CMakelists.txt"> -G "<the type of compiler I want to use>" [Lots of other parameter options]
cmake --build <path to project files> [lots of other options]

Первая строка создает файлы сборки, необходимые компилятору. Флаг генератора -G указывает используемый компилятор. Создание файла проекта также ищет все необходимые библиотеки и т. Д., Чтобы убедиться, что сборка будет работать.

Вторая строка выполняет фактическую компиляцию.

Сценарий InstallOCV.sh просто устанавливает для вас множество этих параметров, но, по сути, выполняет два вышеупомянутых вызова несколько более сложным способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...