c++ - 使用Microsoft Visual C++构建工具进行CMake

原文 标签 c++ visual-c++ cmake

编辑:
把这个发布到他们的问题跟踪者,并与一些cmake开发人员一起过关,这实际上不是cmake的问题。我的msbuild安装有问题,导致它返回“操作已成功完成”错误。总体而言,这个问题仍然没有得到解决,但这缩小了潜在原因的范围。
我试图在Windows上使用MS VisualC++构建工具2015构建一个CGED项目(注:不是完整的VisualStudio)。不过,cmake显然找不到cl.exe

cmake ..
-- Building for: Visual Studio 14 2015
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:4 (project):
  No CMAKE_C_COMPILER could be found.



CMake Error at CMakeLists.txt:4 (project):
  No CMAKE_CXX_COMPILER could be found.

我怀疑这是因为cmake希望在visual studio安装中找到编译器,但可能是独立的构建工具将其安装在不同的位置?是否可以将cmake配置为在其他地方查找编译器?
编辑:为了避免这种可能性通过,cl.exe绝对是安装的。当我打开Visual C++ shell(向路径添加工具)时,输出:
cl.exe
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.24210 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

usage: cl [ option... ] filename... [ /link linkoption... ]

这就是我在运行cmake ..的环境,所以cl.exe肯定是cmake发现的路径。
编辑2:查看cmakeerror.log文件,我看到以下几个变体
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" failed.
Compiler:  
Build flags: 
Id flags:  

The output was:
1
Microsoft (R) Build Engine version 14.0.25420.1
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 4/14/2017 11:58:13 AM.
Project "E:\<project_dir>\build\CMakeFiles\3.8.0-rc4\CompilerIdCXX\CompilerIdCXX.vcxproj" on node 1 (default targets).
PrepareForBuild:
  Creating directory "Debug\".
  Creating directory "Debug\CompilerIdCXX.tlog\".
InitializeBuildStatus:
  Creating "Debug\CompilerIdCXX.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
ClCompile:
  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\CL.exe /c /nologo /W0 /WX- /Od /Oy- /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\\" /Fd"Debug\vc140.pdb" /Gd /TP /analyze- /errorReport:queue CMakeCXXCompilerId.cpp
TRACKER : error TRK0002: Failed to execute command: ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\CL.exe" @C:\Users\<user>\AppData\Local\Temp\tmpa0925a9f05d5426d82afdcee8d722031.rsp". The operation completed successfully. [E:\<project_dir>\build\CMakeFiles\3.8.0-rc4\CompilerIdCXX\CompilerIdCXX.vcxproj]


Done Building Project "E:\<project_dir>\build\CMakeFiles\3.8.0-rc4\CompilerIdCXX\CompilerIdCXX.vcxproj" (default targets) -- FAILED.

Build FAILED.

"E:\<project_dir>\build\CMakeFiles\3.8.0-rc4\CompilerIdCXX\CompilerIdCXX.vcxproj" (default target) (1) ->
(ClCompile target) -> 
  TRACKER : error TRK0002: Failed to execute command: ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\CL.exe" @C:\Users\<user>\AppData\Local\Temp\tmpa0925a9f05d5426d82afdcee8d722031.rsp". The operation completed successfully. [E:\<project_dir>\build\CMakeFiles\3.8.0-rc4\CompilerIdCXX\CompilerIdCXX.vcxproj]

    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:01.21

这看起来像是某种输出兼容性问题,尤其是“错误:操作已成功完成”行。我使用Cuff3.3.0 RC4和Visual C++ 2015构建工具。有什么想法吗?
编辑3:
我认为从3.8.0-rc4升级到3.8.0可能会解决这个问题,但没有效果。我还考虑过我正在使用64位cmake试图构建一个32位程序,所以我也改变了这一点。运气还没好。
编辑4:
另外,据记录,这确实是与cmake一起在安装了full vs 2015的pc上构建的。

最佳答案

我不确定我给你的The operation completed successfully问题带来了一个解决方案,但是我能够用CMAD3.3.1和C++ 2015 Bu建dToo工具编译一个[大]现实项目。
诀窍很简单,就是使用“vs2015 x64 native tools命令提示符”(或x86)。您可以使用此提示符调用cmake,或者从正常提示符调用此提示符,它将正确设置您的路径。

REM Set up the include/lib paths of Visual Studio
call "C:\Program Files (x86)\Microsoft Visual C++ Build Tools\vcbuildtools.bat" amd64

cd to_build_dir

REM Call cmake with the right parameters
"C:\Program Files\CMake\bin\cmake.exe" .......

REM Build the XYZ project
MSBuild.exe SOLUTION_FILE.sln /t:XYZ .......

正如我写的,我不确定它是否能修复你的错误,因为我无法复制它。但是,我知道我的项目只有在使用正确的提示时才能编译。当我不使用它时,我会得到一些call

相关文章:

c++ - cmake add_custom_command发出多个输出文件

c++ - Erlang-C和Erlang

c++ - 使用getter设置私有变量

winapi - 自动检查Win32树视图项目会检查所有子项

linux - CMake安装到bin / lib,但应用程序找不到lib

c++ - 动态链接错误cmake

c++ - 来自构造函数和析构函数的纯虚拟调用

c++ - 将一个std :: vector附加到另一个stnd :: vector的最有效方法是什么?

visual-c++ - 如何使用opencv和vs2012摆脱LNK2019未解决的外部符号错误

c++ - 如何向Visual Studio项目添加其他库?