Ein Visual Studio 2019 Projekt mit CMake erstellen

Seit der Version 3.14 kann man mit CMake Visual Studio 2019 Projekte erstellen. In diesem Post möchte ich kurz zeigen, wie das möglich ist.

Um dieses Beispiel erfolgreich zum Laufen zu bringen, müssen einige Bedingungen erfüllt sein:

  • Visual Studio 2019 muss auf dem Rechner installiert sein.
  • CMake 3.14 (oder höher) muss installiert sein
  • Der Pfad zur cmake.exe muss in der PATH Variable enthalten sein

Mehr braucht es auch nicht. Nun will ich aber mit meinem Beispiel fortfahren. Mein Beispielprojekt für diesen Post besteht nur aus einer einzigen C++-Datei. Das Programm am Ende soll einfach ein Hallo, Welt! in der Kommandozeile ausgeben:

include <iostream>
int main(int argc, char **argv)
{
std::cout << "Hallo, Welt!" << std::endl;
return 0;
}

Wenn man Projekte mit CMake erstellt, gehört dazu eine Datei mit dem Namen CMakeLists.txt. Für dieses Beispiel sieht die so aus:

project(example1)

set(SOURCE_FIlES main1.cpp)

add_executable(example1 ${SOURCE_FIlES})

In der CMakeLists.txt definiere ich in der ersten Zeile den Projektnamen. Diese Zeile sorgt später dafür, dass am Ende eine Solutionsdatei namens example1.sln existiert. Diese Solutionsdatei werden wir später nutzen, um mit Hilfe von Visual Studio 2019 aus dem Code eine ausführbare Datei zu produzieren.

Als nächstes werden alle nötigen Codedateien in der Variablen SOURCE_FILES aufgelistet. Für komplexere Projekte gibt es andere Methoden, aber für unser Beispiel hier ist das ausreichend.

In der letzten Zeile sagen wir dann, dass wir aus den Codedateien eine ausführbare Datei namens example1 erstellt haben wollen (add_executable). Da wir hier unter Windows arbeiten und Visual Studio 2019 nutzen, brauchen wir die Endung hier nicht zu schreiben.

Sowohl die CMakeLists.txt wie auch die C++-Datei sollten in diesem Beispiel in einem Ordner nebeneinander liegen:

CMakeLists.txt und main1.cpp liegen in einem Ordner

Da wir das Projekt nachher noch mit Visual Studio 2019 bauen wollen, rufen wir die x64 Native Tools Command Prompt for VS 2019 aus dem Startmenü auf:

Nun müsste ein Fenster wie das Folgende auftauchen:

In der gestarteten Kommandozile müssen wir nun in den Ordner wechseln, in dem sich die CMakeLists.txt befindet. Sind wir dort, rufen wir CMake mit folgendem Kommando auf:

cmake -G "Visual Studio 16 2019" .

Der Punkt am Ende steht gewollt da. Ist alles gut gegangen, sehen wir am Ende diese Meldung (der Pfad kann sich hierbei anders sein):

-- Build files have been written to: C:/Users/jenkins/Documents/cmake1

Ist alles erfolgreich verlaufen, müsste man in dem Ordner eine Datei namens example1.sln finden. Daneben auch eine example1.vcxproj. Diese Solutionsdatei kann man nun in Visual Studio öffnen oder anderweitig bearbeiten. Jetzt können wir anfangen, das Projekt in der Kommandozeile zu bauen, z.B. durch einen Befehl wie diesen:

msbuild example1.sln

CMake: The ASM_NASM compiler identification is unknown

Neulich bekam ich beim Versuch, unter Ubuntu ein Makefile mit Hilfe von CMake zu erstellen, diese Fehlermeldung:

— The ASM_NASM compiler identification is unknown
— Didn’t find assembler
CMake Error at simd/CMakeLists.txt:41 (enable_language):
No CMAKE_ASM_NASM_COMPILER could be found.

Tell CMake where to find the compiler by setting either the environment
variable “ASM_NASM” or the CMake cache entry CMAKE_ASM_NASM_COMPILER to the
full path to the compiler, or to the compiler name if it is in the PATH.

— Configuring incomplete, errors occurred!

Die Lösung hier war, das Paket nasm zu installieren:

sudo apt install nasm

CMake und VS2017: could not find any instance of Visual Studio.

Vor kurzem bekam ich beim Versuch, ein Visual Studio 2017-Projekt mit CMake zu generieren, diese Fehlermeldung:

CMake Error at CMakeLists.txt:3 (project):
Generator

Visual Studio 15 2017 Win64

could not find any instance of Visual Studio.

— Configuring incomplete, errors occurred!

Die Fehlermeldung hat mich gewundert, da Visual Studio 2017 doch installiert war. Die Lösung bei mir war, dass ich noch die Komponente Visual C++ tools for CMake and Linux habe installieren müssen: