web-dev-qa-db-ja.com

プロジェクトのソースファイルを個別にコンパイルするようにCLionを構成することはできますか?

私は現在、JetBrains CLion IDEを使用して、Cでいくつかのプロジェクトオイラーチャレンジを行っています。 PythonおよびJava(それぞれPyCharmおよびIntelliJ))でこれらを完了したとき、「ProjectEuler」という名前の単一のプロジェクトを常に作成して追加することができました独立して実行できる任意の数のソースファイル。ただし、CLionでは同じことはできないようです。問題を解決するために使用する各ソースファイルにはmain()関数が含まれており、CMakeは毎回そのことに不満を持っていますコンパイルを試みます(「 'main'の複数定義)」。

CMakeLists.txtを書き換えたり、毎回問題ごとに新しいプロジェクトを作成したりすることなく、一度にプロジェクトの単一のソースファイルのみをコンパイルして実行するようにCLionを構成する方法はありますか?

Cがコンパイルされ、JavaまたはPythonのように解釈されないことを知っていますが、おそらくすべてのソースファイルを手動でコンパイルすることもできます。同じようにCLionを構成する方法はありますか?だから、どうやって?

28
nidorion

各問題について、CMakeLists.txtで複数の実行可能ファイルを定義できます。

の代わりに

add_executable(projecteuler ${SOURCE_FILES})

あなたが定義することができます

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

次に、各実行可能ファイル(problem1、problem2など)の実行構成を取得します。実行構成は個別に実行できます。この場合、毎回書き換える必要はなく、新しいソースファイルを新しい実行可能ファイルに追加するだけです。

32
ipa

使用できます

_cmake_minimum_required(VERSION 2.8.4)

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

次に、各ディレクトリに次のような別のCMakeLists.txtを作成します。

_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})
_

編集にファイルを自動的に追加する場合は、file(GLOB SOURCE_FILES *.cpp)を使用できます。ただし、この「トリック」は強くお勧めしません。

これにより、ビルド構成が自動的にCLionに追加されます。

3
Waxo

同じ問題に直面していても、CMakeファイルを編集して実行ファイルを毎回追加するのは骨の折れる仕事です。だから私はこれに対する解決策を見つけました、

それをシームレスに行うプラグインがあります。

この plugin をCLionに追加するだけで、作成するファイルが実行可能ファイルで右クリックして、実行可能ファイルとして追加します。

CMakeファイルが自動的に編集されます。

リンク:

https://plugins.jetbrains.com/plugin/8352-c-c--single-file-execution

1

これらの行をCMakeLists.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})
_

プロジェクトからファイルを追加または削除するたびに、cmakeプロジェクト([ツール]-> [Cmake])をリロードする必要があります。また、ファイルを追加すると、ビルド時間が長くなります。別の方法として、より多くのディレクトリとサブディレクトリを作成し、file(GLOB_RECURSE APP_SOURCES path/to/*.c)を使用して、それらのファイルのみをビルドすることができます。

1
Vignesh Pillay