Czy jest możliwe skonfigurowanie Cliona do samodzielnego kompilowania plików źródłowych w projekcie?

Obecnie wykonuję kilka wyzwań projektu Euler w C przy użyciu JetBrains CLion IDE. Kiedy ukończyłem je w Pythonie i Javie (odpowiednio w PyCharm i IntelliJ), zawsze byłem w stanie stworzyć pojedynczy projekt o nazwie "ProjectEuler" i dodać dowolną liczbę plików źródłowych, które mogłem wykonać niezależnie. Jednak wydaje się, że to samo nie jest możliwe w CLion. Każdy z plików źródłowych, których używam do rozwiązania problemu, zawiera funkcję main (), a CMake jest niezadowolony z tego za każdym razem, gdy próbuję do kompilacji ("multiple definition of 'main'").

Czy istnieje sposób na skonfigurowanie CLion tylko kompilować i wykonywać jeden plik źródłowy w projekcie na raz bez konieczności przepisywania moich CMakeLists.txt lub stworzyć nowy projekt dla każdego problemu za każdym razem?

Wiem, że C jest skompilowany i nie jest interpretowany jak Java lub Python, ale mógłbym po prostu skompilować każdy pojedynczy plik źródłowy ręcznie. Czy istnieje sposób na skonfigurowanie Cliona tak, aby robił to samo? Jeśli tak, to w jaki sposób?

Author: nidorion, 2015-05-14

3 answers

Możesz zdefiniować wiele plików wykonywalnych w Cmakelistach.txt dla każdego problemu.

Zamiast

add_executable(projecteuler ${SOURCE_FILES})

Można zdefiniować

add_executable(problem1 problem1.c)
add_executable(problem2 problem2.c)

Następnie dostajesz dla każdego pliku wykonywalnego (problem1, problem2 itd.) konfiguracja run, którą można uruchomić niezależnie. W takim przypadku nie będziesz musiał przepisywać za każdym razem, zamiast tego po prostu dodaj nowy plik źródłowy do nowego pliku wykonywalnego.

 28
Author: ipa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-16 09:12:43

Możesz użyć

cmake_minimum_required(VERSION 2.8.4)

add_subdirectory(src/prj1)
add_subdirectory(src/prj2)

Następnie w każdym katalogu Utwórz inne Cmakelisty.txt jak ten:

cmake_minimum_required(VERSION 2.8.4)
project(prj1)

set(EXEC_NAME prj1)

set(SOURCE_FILES
    main_prj1.cpp
    x.cpp
    y.cpp
)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(EXECUTABLE_OUTPUT_PATH ../../dist/${CMAKE_BUILD_TYPE})

add_executable(${EXEC_NAME} ${SOURCE_FILES})

Możesz użyć file(GLOB SOURCE_FILES *.cpp), jeśli chcesz automatycznie dodać pliki do swojej kompilacji. Należy jednak pamiętać, że ta" sztuczka " nie jest zdecydowanie zachęcana.

Spowoduje to również automatyczne dodanie konfiguracji kompilacji do CLion.

 3
Author: Waxo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-19 07:07:21

Możesz dodać te linie do swoich Cmakelist.txt .

    #GLOB_RECURSE will find files in all subdirectories that match the globbing expressions and store it into the variable.
    file(GLOB_RECURSE APP_SOURCES *.c)
    foreach (testsourcefile ${APP_SOURCES})
        #get filename without extension
        get_filename_component(testname ${testsourcefile} NAME_WE)
        #add executable for all file
        add_executable(${testname} ${testsourcefile})
    endforeach (testsourcefile ${APP_SOURCES})

Będziesz musiał przeładować projekt cmake (narzędzia -> Cmake) za każdym razem, gdy dodasz lub usuniesz pliki z projektu. Również czas kompilacji zwiększy się, jeśli dodasz więcej plików. Alternatywnie możesz utworzyć więcej katalogów i podkatalogów i użyć file(GLOB_RECURSE APP_SOURCES path/to/*.c), więc zbuduje tylko te pliki.

 0
Author: Vignesh Pillay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-11 06:43:23