Visual studio 使用VIsual Studio 2015和Clang制作CMake
我是CMake的初学者,最近刚将当前项目从Visual Studio 2015解决方案迁移到CMake项目。我花了几天时间,但现在我的项目已经完全迁移,生成的VisualStudio解决方案看起来和感觉都与原始解决方案一模一样。当使用MSVC和平台工具集v140时,我仍然可以很好地构建我的项目。现在,在所有这些之后,我想通过使用不同的编译器构建我的项目来尝试CMake的好处。特别是,我的项目中有一些与模板相关的代码,我认为这些代码不太符合标准,所以我想用Clang来构建它,我知道在与模板相关的东西上,Clang比MSVC更严格。为此,我启动了CMake GUI,选择源代码和二进制路径,单击配置,选择“VisualStudio 14 2015”,并在平台工具集字段中键入“v140_clang_3_7”,保留所有其他设置不变 不幸的是,执行此操作时,CMake无法配置(并生成)我的解决方案,出现以下错误:Visual studio 使用VIsual Studio 2015和Clang制作CMake,visual-studio,visual-studio-2015,cmake,clang,cmake-gui,Visual Studio,Visual Studio 2015,Cmake,Clang,Cmake Gui,我是CMake的初学者,最近刚将当前项目从Visual Studio 2015解决方案迁移到CMake项目。我花了几天时间,但现在我的项目已经完全迁移,生成的VisualStudio解决方案看起来和感觉都与原始解决方案一模一样。当使用MSVC和平台工具集v140时,我仍然可以很好地构建我的项目。现在,在所有这些之后,我想通过使用不同的编译器构建我的项目来尝试CMake的好处。特别是,我的项目中有一些与模板相关的代码,我认为这些代码不太符合标准,所以我想用Clang来构建它,我知道在与模板相关的东
The C compiler identification is Clang 3.7.0
The CXX compiler identification is Clang 3.7.0
Check for working C compiler using: Visual Studio 14 2015
Check for working C compiler using: Visual Studio 14 2015 -- broken
CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.5/Modules/CMakeTestCCompiler.cmake:61 (message):
The C compiler "C:/Program Files (x86)/Microsoft Visual Studio
14.0/VC/bin/cl.exe" is not able to compile a simple test program.
It fails with the following output:
Change Dir: C:/Users/marku/Desktop/build_muell/CMakeFiles/CMakeTmp
Run Build Command:"C:/Program Files (x86)/MSBuild/14.0/bin/MSBuild.exe"
"cmTC_c4641.vcxproj" "/p:Configuration=Debug" "/p:VisualStudioVersion=14.0"
Microsoft (R)-Buildmodul, Version 14.0.25123.0
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.
Der Buildvorgang wurde am Mo, 23.05.2016 00:52:13 gestartet.
Das in einem BeforeTargets-Attribut bei "C:\Program Files
(x86)\MSBuild\14.0\Microsoft.Common.targets\ImportAfter\Xamarin.Common.targets
(34,37)" aufgef�hrte Ziel "_ConvertPdbFiles" ist nicht im Projekt vorhanden
und wird daher ignoriert.
Das in einem AfterTargets-Attribut bei "C:\Program Files
(x86)\MSBuild\14.0\Microsoft.Common.targets\ImportAfter\Xamarin.Common.targets
(34,70)" aufgef�hrte Ziel "_CollectPdbFiles" ist nicht im Projekt vorhanden
und wird daher ignoriert.
Das in einem BeforeTargets-Attribut bei "C:\Program Files
(x86)\MSBuild\14.0\Microsoft.Common.targets\ImportAfter\Xamarin.Common.targets
(40,38)" aufgef�hrte Ziel "_CollectMdbFiles" ist nicht im Projekt vorhanden
und wird daher ignoriert.
Das in einem AfterTargets-Attribut bei "C:\Program Files
(x86)\MSBuild\14.0\Microsoft.Common.targets\ImportAfter\Xamarin.Common.targets
(40,71)" aufgef�hrte Ziel "_CopyMdbFiles" ist nicht im Projekt vorhanden
und wird daher ignoriert.
Projekt
"C:\Users\marku\Desktop\build_muell\CMakeFiles\CMakeTmp\cmTC_c4641.vcxproj"
auf Knoten "1" (Standardziele).
PrepareForBuild:
Das Verzeichnis "cmTC_c4641.dir\Debug\" wird erstellt.
Das Verzeichnis "C:\Users\marku\Desktop\build_muell\CMakeFiles\CMakeTmp\Debug\" wird erstellt.
Das Verzeichnis "cmTC_c4641.dir\Debug\cmTC_c4641.tlog\" wird erstellt.
InitializeBuildStatus:
"cmTC_c4641.dir\Debug\cmTC_c4641.tlog\unsuccessfulbuild" wird erstellt, da "AlwaysCreate" angegeben wurde.
C:\Program Files
(x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Clang.targets(210,5):
error : Element <DebugInformationFormat> has an invalid value of
"ProgramDatabase".
[C:\Users\marku\Desktop\build_muell\CMakeFiles\CMakeTmp\cmTC_c4641.vcxproj]
Die Erstellung des Projekts
"C:\Users\marku\Desktop\build_muell\CMakeFiles\CMakeTmp\cmTC_c4641.vcxproj"
ist abgeschlossen (Standardziele) -- FEHLER.
Fehler beim Buildvorgang.
"C:\Users\marku\Desktop\build_muell\CMakeFiles\CMakeTmp\cmTC_c4641.vcxproj"
(Standardziel) (1) ->
(ClCompile Ziel) ->
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Clang.targets(210,5): error : Element <DebugInformationFormat> has an invalid value of "ProgramDatabase". [C:\Users\marku\Desktop\build_muell\CMakeFiles\CMakeTmp\cmTC_c4641.vcxproj]
0 Warnung(en)
1 Fehler
Verstrichene Zeit 00:00:00.70
CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt
Configuring incomplete, errors occurred!
See also "C:/Users/marku/Desktop/build_muell/CMakeFiles/CMakeOutput.log".
See also "C:/Users/marku/Desktop/build_muell/CMakeFiles/CMakeError.log".
C编译器标识为Clang 3.7.0
CXX编译器标识为Clang 3.7.0
使用Visual Studio 14 2015检查C编译器是否正常工作
使用Visual Studio 14 2015检查C编译器是否正常工作--已损坏
C:/Program Files(x86)/CMake/share/CMake-3.5/Modules/CMakeTestCCompiler处的CMake错误。CMake:61(消息):
C编译器“C:/ProgramFiles(x86)/Microsoft Visual Studio
14.0/VC/bin/cl.exe“无法编译简单的测试程序。
它失败,输出如下:
更改目录:C:/Users/marku/Desktop/build\u muell/CMakeFiles/CMakeTmp
运行生成命令:“C:/ProgramFiles(x86)/MSBuild/14.0/bin/MSBuild.exe”
“cmTC_c4641.vcxproj”“/p:Configuration=Debug”“/p:VisualStudioVersion=14.0”
Microsoft(R)-Buildmodul,版本14.0.25123.0
版权所有(C)微软公司。好的。
密苏里州沃尔冈-沃尔德大厦,2016年5月23日00:52:13盖世太特。
在einem BeforeTargets属性bei“C:\Program Files中的Das
(x86)\MSBuild\14.0\Microsoft.Common.targets\ImportAfter\Xamarin.Common.targets
(34,37)“aufgef�“转换文件”在项目中不起作用
我和达赫·伊格诺里特在一起。
einem中的Das后目标属性bei“C:\Program Files
(x86)\MSBuild\14.0\Microsoft.Common.targets\ImportAfter\Xamarin.Common.targets
(34,70)“aufgef�“收藏文件”是一个项目
我和达赫·伊格诺里特在一起。
在einem BeforeTargets属性bei“C:\Program Files中的Das
(x86)\MSBuild\14.0\Microsoft.Common.targets\ImportAfter\Xamarin.Common.targets
(40,38)“aufgef�“收藏文件”是一个不受欢迎的项目
我和达赫·伊格诺里特在一起。
einem中的Das后目标属性bei“C:\Program Files
(x86)\MSBuild\14.0\Microsoft.Common.targets\ImportAfter\Xamarin.Common.targets
(40,71)“aufgef�“复制文件”在项目中不起作用
我和达赫·伊格诺里特在一起。
项目
“C:\Users\marku\Desktop\build\u muell\CMakeFiles\CMakeTmp\cmTC\u c4641.vcxproj”
auf Knoten“1”(标准化)。
PrepareForBuild:
“cmTC_c4641.dir\Debug\”是一个很好的例子。
Das Verzeichnis“C:\Users\marku\Desktop\build\u muell\CMakeFiles\CMakeTmp\Debug\”wird-erstellt。
这句话的意思是:“cmTC_c4641.dir\Debug\cmTC_c4641.tlog\”这句话的意思是。
初始化BuildStatus:
“cmTC_c4641.dir\Debug\cmTC_c4641.tlog\unsuccessfullbuild”wird erstellt,da“AlwaysCreate”angegeben wurde。
C:\程序文件
(x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Clang.targets(210,5):
错误:元素的值无效
“程序数据库”。
[C:\Users\marku\Desktop\build\u muell\CMakeFiles\CMakeTmp\cmTC\u c4641.vcxproj]
工程设计
“C:\Users\marku\Desktop\build\u muell\CMakeFiles\CMakeTmp\cmTC\u c4641.vcxproj”
这是abgeschlossen(标准)——费勒。
费勒·贝姆·沃冈。
“C:\Users\marku\Desktop\build\u muell\CMakeFiles\CMakeTmp\cmTC\u c4641.vcxproj”
(标准化)(1)->
(克莱尔)->
C:\Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Clang.targets(210,5):错误:元素的“ProgramDatabase”值无效。[C:\Users\marku\Desktop\build\u muell\CMakeFiles\CMakeTmp\cmTC\u c4641.vcxproj]
0华农(英)
1费勒
Verstrichene Zeit 00:00:00.70
CMake将无法正确生成此项目。
调用堆栈(最新调用优先):
CMakeLists.txt
配置不完整,出现错误!
另请参见“C:/Users/marku/Desktop/build\u muell/CMakeFiles/CMakeOutput.log”。
另请参见“C:/Users/marku/Desktop/build\u muell/CMakeFiles/CMakeError.log”。
现在我不知道这个错误是什么意思,也不知道是什么导致了这个错误,除了CMake显然试图编译一个失败的测试程序。错误日志中的“Xamarin”内容感觉特别不合适。我已经尝试了一些方法来解决这个问题。最初,我在Visual Studio 2015 Update 1上,实际上遇到了一个不同的错误(我不记得了,因为我没有记录它)。经过谷歌的一些研究,我决定安装VS2015的更新2,希望它能解决这个问题,但它只会导致一个不同的错误,这就是你在上面看到的错误
出于好奇,我还采用了我最初的VS解决方案,并尝试将平台工具集设置为叮当作响。它仍然没有编译,但至少它给了我一个合理的错误消息,这对我来说是有意义的(提到解决方案的“警告级别”属性有一个它没有预料到的值)。但是,有了这个错误日志,我甚至不知道从哪里开始寻找问题的根源
现在我可以在这里分享我的CMake代码,但我不确定这是否有用。项目代码分为多个文件,因此共享它有点复杂,我也不确定问题的原因是否首先可以通过CMake文件找到。我实际上假设c
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0 -g2 -gdwarf-2 -fexceptions")
else ()
# for cl.exe
endif ()