2016-05-05 6 views
2

Die meisten Leute, die von einer anderen IDE mit einer Option zum Erstellen einer einzelnen Datei wechselten, sind von CLion etwas verwirrt, was keine Option hat.Wie vermeidet man das Hinzufügen jeder Quelldatei zu CMake in CLion?

Wie können Sie vermeiden, jeden Namen jeder Quelldatei in CMake hinzuzufügen?

+1

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. –

+0

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

+1

@ 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. –

Antwort

-1

Ich habe eine Vorlage CMake-Datei geschrieben, die ich benutze, die dies für Sie tun kann. Es macht Quelldateien automatisch als separate ausführbare Dateien.

Cmake Vorlage finden Sie hier: template file

Sie müssen es nur in CMakeLists.txt einzufügen und cmake zu aktualisieren. Sie können dann einfach aus dem Dropdown-Menü auswählen, welche Datei Sie ausführen möchten. refresh in Clion Einstellungen für Cmake Tastenkombination hinzufügen

2

Was Sie suchen etwas wie file(GLOB_RECURSE *.cpp) ist:

Hint. Sie können diesen Befehl anpassen, um Verzeichnisse bei Bedarf zu filtern.

0

Hier ist ein komplettes Beispiel, das es tut.

cmake_minimum_required(VERSION 2.8.12) 
project(openshell) 
set(CMAKE_VERBOSE_MAKEFILE on) 
file(GLOB SOURCES "./*.c") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -L/usr/local/include/ -L/usr/include -std=c11 -pedantic -O3 -g -Wall -pedantic -ledit -lncurses -lcurses -ltermcap") 
include_directories(/usr/local/include/ /usr/include) 
link_directories(/usr/lib) 
link_directories(/usr/local/ib) 
add_executable(openshell ${SOURCES}) 
target_link_libraries(openshell edit readline) 
0

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:

  1. Eine Quelldatei für jedes Unterunterverzeichnis
  2. die Struktur der gleichen wie AAA/BBB sein muss, wo AAA ein Verzeichnis Elternteil und BBB ist es Unterverzeichnis ist.
  3. Sie können mehr AAA in der gleichen Ebene hinzufügen und auch mehr BBB

Hoffen, dass es

Verwandte Themen