CMake忽略$ CC和$ CXX吗?

时间:2019-01-18 14:13:37

标签: opencv cmake environment-variables

我正在尝试从Windows 10上的源代码编译OpenCV,因为我认为这是将the surface matching module合并到库中的方法。我尝试遵循安装说明here,但是当我尝试从gitbash内部执行installOCV.sh时,如上所述,当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

CMake显然不会考虑$CC$CXX,尽管它们存在:

$ 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 :(得分:0)

CMake是一个两步过程。第一步是创建一组供编译器使用的makefile或项目文件。在这种情况下,您要创建MS Visual Studio项目文件。

基本的CMake命令是:

ELF

第一行创建编译器所需的构建文件。生成器标志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] 指定正在使用的编译器。项目文件的创建还会搜索任何需要的库等,以确保构建能够正常工作。

第二行进行实际的编译。

InstallOCV.sh脚本只是为您设置了许多这些参数,但实际上,这是通过稍微复杂一些的方式完成上述两个调用。

答案 1 :(得分:0)

尝试通过MinGW下载C和C ++编译器。 对于C和C ++,这些文件分别命名为gcc.exe和g ++。exe。将它们添加到环境路径变量中,然后执行您的shell文件。

我希望这会有所帮助!