是否可以将CLion配置为独立编译项目中的源文件?

时间:2015-05-14 14:02:26

标签: c compilation ide clion

我目前正在使用JetBrains CLion IDE在C中执行一些Project Euler挑战。当我用Python和Java(分别在PyCharm和IntelliJ中)完成这些时,我总是能够创建一个名为“ProjectEuler”的项目,并添加我可以独立执行的任意数量的源文件。但是,在CLion中似乎无法做到这一点。我用来解决问题的每个源文件都包含一个main()函数,每当我尝试编译时,CMake就会对此感到不满(“main”的多重定义“)。

有没有办法将CLion配置为一次只编译和执行项目中的单个源文件,而不必每次都重写我的CMakeLists.txt或为每个问题创建一个新项目?

我知道C是编译的,而不是像Java或Python那样解释,但我可以想象只是手动编译每个源文件。有没有办法配置CLion做同样的事情?如果是这样,怎么样?

5 个答案:

答案 0 :(得分:31)

您可以在CMakeLists.txt中为每个问题定义多个可执行文件。

而不是

add_executable(projecteuler ${SOURCE_FILES})

你可以定义

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

然后你得到每个可执行文件(problem1,problem2等)一个运行配置,你可以独立运行。在这种情况下,您不必每次都重写,而只需将新的源文件添加到新的可执行文件中。

答案 1 :(得分:3)

您可以使用

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。

答案 2 :(得分: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项目(Tools - > Cmake)。如果添加更多文件,构建时间也会增加。另外,您可以创建更多目录和子目录,并使用file(GLOB_RECURSE APP_SOURCES path/to/*.c),这样它只会构建那些文件。

答案 3 :(得分:0)

即使我遇到了同样的问题,每次编辑CMake文件并添加可执行文件也是一项艰巨的工作。所以我找到了解决方案,

有一个插件可以为您无缝完成。

只需将此plugin添加到您的CLion中,您要创建的任何文件都是可执行文件,请右键单击并将其添加为可执行文件,

它将自动编辑您的CMake文件。

链接:

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

答案 4 :(得分:0)

在CMakeLists.txt中为每个源文件添加可执行文件后,必须通过按右上角的Reload按钮重新加载文件,然后将run debug configuration设置为他要运行的源文件名。

相关问题