hatte ich das gleiche Problem mit C++ und CMake mit CLION. Und das, wie ich es lösen verwaltet:
Hier meine Projektstruktur ist:
├── CMakeLists.txt
├── README.md
└── src
└── ch01
├── ex01
│ └── main.cpp
└── ex02
└── main.cpp
Hier sind die Inhalte von CMakeLists.txt
:
cmake_minimum_required(VERSION 3.5)
project(CPPTutorial)
set(CMAKE_CXX_STANDARD 14)
set(sourceDir "${PROJECT_SOURCE_DIR}/src")
file(GLOB_RECURSE sourceFiles "${sourceDir}/*.cpp")
FOREACH (sourceFile ${sourceFiles})
MESSAGE(STATUS "Process file: ${sourceFile}")
get_filename_component(dir1 ${sourceFile} PATH)
get_filename_component(dir1 ${dir1} NAME)
get_filename_component(dir2 "${sourceFile}/../../" ABSOLUTE)
get_filename_component(dir2 ${dir2} NAME)
MESSAGE(STATUS "New target: ${dir2}_${dir1}")
add_executable("${dir2}_${dir1}" ${sourceFile})
endforeach (sourceFile)
Es schafft ein neues Ziel für jede Quelle in dem Verzeichnis .. eigentlich braucht es mehr Arbeit, aber es macht den Job für mich.
Einschränkungen:
- Eine Quelldatei für jedes Unterunterverzeichnis
- die Struktur der gleichen wie
AAA/BBB
sein muss, wo AAA
ein Verzeichnis Elternteil und BBB
ist es Unterverzeichnis ist.
- Sie können mehr
AAA
in der gleichen Ebene hinzufügen und auch mehr BBB
Hoffen, dass es
hilft mir das genaue Gegenteil bevorzugen (und [ich bin nicht allein] (http: // Stackoverflow .com/a/1060061/3962537)) - um explizit jede Quelle anzugeben, die für jede Komponente im Projekt verwendet werden soll. Wie die verknüpften Antworten im Detail erklären, vermeidet es viele Probleme, wenn Sie mit größeren Projekten beginnen. –
Ihre Frage ist weniger eine Frage, eher eine Meinung. Wenn Sie Ihre eigene Frage in der gleichen Minute beantwortet haben, lässt mich verwirrt, was Sie eigentlich wollen. Downvoting. – usr1234567
@ usr1234567 Für viele Leute, die von Codeblocks wechseln und kompetitive Programmierprobleme machen (zum Beispiel haben Sie mehrere separate Programme in ihrer eigenen Quelldatei), ist es wirklich schmerzhaft, jeden Quelldateinamen in cmakelists.txt hinzuzufügen und Konfigurationen auf diese Weise zu erstellen.Ich dachte, dass dies für jemanden wie für mich hilfreich sein könnte, weil ich den ganzen Tag verloren habe, um es herauszufinden. –