Während es leicht ist, Informationen über die Oberfläche zu finden, wie man CMake benutzt, scheint es sehr schwierig zu finden, wie man CMake korrekt benutzt. Wie sollten in einem CMake-Projekt von anständiger Größe (eine ausführbare Datei, eine oder mehrere statische Bibliotheken, die von dieser ausführbaren Datei verwendet werden, eine oder mehrere externe Abhängigkeiten, die von den statischen Bibliotheken verwendet werden) die Ordner und CMakeList.txt-Dateien bestellt werden? Welche CMakeList.txt-Dateien sollten welche Befehle haben?Wie richte ich ein CMake-Projekt korrekt ein?
Antwort
Eine gute Möglichkeit, zu lernen, wie CMake effektiv zu nutzen, ist in anderen Projekten suchen. LLVM und seine Teilprojekte sind ein gutes Beispiel.
Im Allgemeinen konvertieren gute Codierpraktiken in gute CMake-Praktiken. Sie wollen Modularität, einen klaren Stil und Flexibilität.
Ein Beispiel hierfür könnte sein, Regeln für die Erstellung Ihrer ausführbaren Datei im Verzeichnis src
zu haben, und dieses Ziel dann im Stammprojektordner zu verwenden. Etwas wie folgt aus:
-my_proj
|
----CMakeLists.txt //contains directives for top-level dependencies and linking, includes subfolders
----src
|
----CMakeLists.txt //contains definition of your main executable target
----internal_lib
|
----CMakeLists.txt //contains definition of your internal static libraries
my_proj/CMakeLists.txt
add_subdirectory(src)
find_package (Threads REQUIRED) #find pthreads package
target_link_libraries (my_exe my_lib ${CMAKE_THREAD_LIBS_INIT}) #link against pthreads and my_lib
my_proj/src/CMakeLists.txt
add_subdirectory(internal_lib)
add_executable(my_exe my_source1.cpp mysource2.cpp)
my_proj/src/internal_lib/CMakeLists.txt
add_library(my_lib my_lib_source1.cpp my_lib_source2.cpp)
Könnten Sie ein sehr einfaches Beispiel dafür angeben, wie diese CMakeLists.txt-Dateien aussehen würden? –
@ruslo, ein fairer Punkt, aber sie sind ziemlich gut kommentiert und zeigen die Verwendung einer breiten Palette von Funktionen, die mehr als ich für viele andere Beispiele sagen könnte. Zusätzlich werden die CMakeLists einfacher, wenn Sie die Verzeichnisstruktur absenken; Ich würde hoffen, dass jeder die Dateien zum Erstellen interner statischer Bibliotheken verstehen könnte. – TartanLlama
Ich hoffe, this tutorial ist genau das, was Sie brauchen, um mit einer CMake-Konfiguration für ein einfaches Projekt zu beginnen, das eine ausführbare Datei und mehrere Bibliotheken enthält - werfen Sie einen Blick darauf! Ich finde die CMake von Beispiel ohnehin die beste Möglichkeit CMake die einfache Möglichkeit, zu lernen:
mittels CMake mit ausführbaren Dateien
add_executable(myapp main.c)
mittels CMake mit statischen Bibliotheken
add_library(test STATIC test.c)
Verwendung von CMake mit dynamischen Bibliotheken
add_library(test SHARED test.c)
Einbinden von Bibliotheken mit CMake ausführbaren
add_subdirectory(libtest_project) add_executable(myapp main.c) target_link_libraries(myapp test)
Wenn Sie interessiert sind, können Sie dieses Tutorial ein wenig verbessern, verwenden Sie: [cmake -H. -B_builds] (http://StackOverflow.com/a/20611964/2288008), um ein Projekt zu erstellen (anstelle von 'mkdir _builds && cd _builds && cmake ..'). 'make' und' make install' funktionieren nur für Makefile, Sie können 'cmake --build _builds' und' cmake --build _builds --target install' für jede Art von Generatoren verwenden. Auch wenn Sie 'ExternalProject_Add' verwenden, können Sie' find_package' Module nicht verwenden. –
- 1. Wie richte ich Emacs-Farben korrekt ein?
- 2. Wie richte ich ein Django-Projekt in OSx korrekt ein?
- 3. Wie richte ich PreAuthenticationAuthenticationProvider ein?
- 4. Wie richte ich eine interne Website ein?
- 5. Wie richte ich einen eigenen Proxy ein?
- 6. Wie richte ich ein Paketobjekt an?
- 7. Wie richte ich einen PHP-Daemon ein?
- 8. Wie richte ich PHP und MySQL ein?
- 9. Wie richte ich gitlab CI-Läufer ein?
- 10. Wie richte ich eine Jcurses-Bibliothek ein?
- 11. Wie richte ich Geocoder mit google_premier ein?
- 12. Wie richte ich die nativ-Datei ein?
- 13. Android: Wie richte ich ein TextView richtig?
- 14. Wie richte ich ein References_one in Mongoid ein?
- 15. Wie richte ich ein SSL-Zertifikat für Express v4.13 ein?
- 16. Wie richte ich ein lokales Python-Bibliotheksverzeichnis/PYTHONPATH ein?
- 17. Wie richte ich ein iPhone-Entwicklungszertifikat für ANDERE mac ein
- 18. Wie richte ich einen OpenID-Provider (Server) in Ubuntu ein?
- 19. Wie richte ich Thai-Schrift korrekt in libGDX?
- 20. jQuery Tabs und Ajax - wie richte ich die Seiten ein?
- 21. Wie richte ich meine CanCanCan-Berechtigungen richtig ein?
- 22. Wie kann ich ein Observable korrekt ausmessen?
- 23. Wie kann ich ein Programm korrekt versionieren?
- 24. Wie richte ich ein Testprojekt für ein Eclipse-Plugin-Projekt ein?
- 25. Wie richte ich ein Ereignis in FakeItEasy für ein Ereignis basierend auf einem benutzerdefinierten Delegaten ein?
- 26. Wie richte ich ein Raster als Vorlage für ein Elementsteuerelement ein?
- 27. Wie richte ich ein Git-Repository für ein Xcode-Projekt ein?
- 28. Wie richte ich ein Git-Projekt ein, um ein externes Repomodul zu verwenden?
- 29. Wie richte ich mehrere Quellordner in einem Eclipse-Projekt ein?
- 30. Wie richte ich IntelliJ auf zwei Monitoren ein?
Haben Sie das Wiki http://www.cmake.org/Wiki/CMake auf cmake gelesen Seite? ˅? –
@SergeiNikulov Zitat: 'Sie sind jetzt auf dem CMake Wiki. Viele Seiten sind jetzt veraltet und manchmal sogar als schlechte Praxis angesehen. Diese werden nur als Referenz für frühere CMake-Versionen beibehalten. – Zingam