Я новичок в CMake и недавно перенес свой текущий проект из решения Visual Studio 2015 в проект CMake. Мне потребовалось несколько дней, но теперь я нахожусь в точке, где мой проект полностью переносится, и созданное решение Visual Studio выглядит так же, как и исходное решение. Я все еще могу создать свой проект при использовании MSVC и инструментальных средств платформы v140. Теперь, после всего этого, я хотел попробовать преимущества CMake, создав свой проект разными компиляторами. В частности, в моем проекте есть некоторый код, связанный с шаблонами, который, как мне кажется, не соответствует стандарту, поэтому я хотел его создать с помощью Clang, который, как я знаю, более строг, чем MSVC для связанных с шаблонами материалов. Для этого я начал использовать CMake GUI, выбранный исходный код и двоичные пути, щелкнул configure, выбрал «Visual Studio 14 2015» и набрал «v140_clang_3_7» в поле набора инструментов платформы, оставив все остальные настройки нетронутыми.CMake с VIsual Studio 2015 и Clang
К сожалению, при этом, CMake не удается настроить (и генерация) мое решение со следующей ошибкой:
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".
Теперь я понятия не имею, что смысл этой ошибки или то, что может быть причиной его , кроме того факта, что CMake, по-видимому, пытается скомпилировать тестовую программу, которая терпит неудачу. Материал «Xamarin» в журнале ошибок особенно неуместен. Я уже пробовал пару вещей, чтобы решить эту проблему. Первоначально я был на Visual Studio 2015 Update 1 и фактически получал другую ошибку (которую я не помню, потому что я ее не документировал). После некоторых исследований Google я решил установить Update 2 из VS2015, надеясь, что это может устранить проблему, но это приведет только к другой ошибке, которую вы видите выше.
Просто из любопытства я также взял свое оригинальное решение VS и попытался установить набор инструментов платформы для Clang. Он по-прежнему не компилируется, но, по крайней мере, он дал мне разумное сообщение об ошибке, которое действительно имело для меня какое-то значение (упоминание о том, что свойство «warning level» для решения имеет значение, которого оно не ожидало). Однако с этим журналом ошибок я понятия не имею, где даже начать искать источник проблемы.
Теперь я мог бы поделиться своим кодом CMake здесь, но я не уверен, что это будет полезно. Код проекта разделен между несколькими файлами, поэтому его совместное использование немного сложнее, и я также не уверен, что причина проблемы может быть найдена в файлах CMake в первую очередь. Я фактически предполагаю, что причина проблемы может быть не связана с самим кодом проекта. Я пробовал искать информацию об этой ошибке, но, к сожалению, все, что у меня было, было около пяти ударов, все из которых содержали только этот журнал ошибок без каких-либо решений проблемы. Я не уверен, с чего начать искать. У кого-то есть опыт с этим и может привести меня в правильном направлении? Пожалуйста, дайте мне знать, если у вас есть идея или ожидаете, что увидеть какой-либо из моих кодов может помочь найти причину ошибки.
Вы когда-нибудь получали ответ на этот вопрос? Я получаю очень похожую ошибку о 'Element имеет недопустимое значение « ProgramDatabase ».' –
jml
К сожалению, я не решил проблему самостоятельно, но обнаружил несколько вещей. Прежде всего, Visual Studio на самом деле ожидает, что все свойства в проекте будут совместимы с используемым компилятором. Таким образом, чтобы установить уровень предупреждения для max для clang, например, вы должны использовать -Weverything вместо/W4. Это нужно учитывать при ручной установке флагов с помощью cmake. В противном случае вы получите ошибки «недопустимого значения». То, что я делаю (на данный момент), - это сгенерировать решение с помощью набора инструментов по умолчанию в CMake, а затем вручную изменить набор инструментов и плохие флаги в VS после этого. Это прекрасно работает. –