Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以将CLion配置为独立编译项目中的源文件?_C_Compilation_Ide_Clion - Fatal编程技术网

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

是否可以将CLion配置为独立编译项目中的源文件?,c,compilation,ide,clion,C,Compilation,Ide,Clion,我目前正在使用JetBrains CLion IDE进行一些C语言的Euler项目挑战。当我用Python和Java(分别用PyCharm和IntelliJ)完成这些工作时,我总是能够创建一个名为“ProjectEuler”的项目,并添加任意数量的可以独立执行的源文件。然而,在CLion中似乎不可能做到这一点。我用来解决问题的每个源文件都包含一个main()函数,每次我尝试编译(“main”的多个定义)时,CMake都会对此感到不高兴 有没有办法将CLion配置为一次只编译和执行项目中的单个源文

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

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


我知道C是编译的,不像Java或Python那样解释,但我可以想象,我可以手动编译每个源文件。有没有办法将CLion配置为执行相同的操作?如果是,如何解决?

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

而不是

add_executable(projecteuler ${SOURCE_FILES})
你可以定义

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

您可以使用

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})
如果要在编译中自动添加文件,可以使用
文件(GLOB SOURCE_FILES*.cpp)
。但请记住,这种“伎俩”是不受鼓励的


这也会自动将构建配置添加到CLion。

您可以将这些行添加到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)。此外,如果添加更多的文件,构建时间也会增加。或者,您可以创建更多的目录和子目录,并使用
文件(GLOB\u RECURSE APP\u SOURCES path/to/*.c)
,这样它将只生成这些文件。

即使我面临同样的问题,每次编辑CMake文件并添加可执行文件也是一项累人的工作。所以我找到了解决办法

有一个插件可以无缝地为您实现这一点

只需将其添加到CLion中,然后右键单击要生成的可执行文件并将其添加为可执行文件

它将自动编辑您的CMake文件

链接:


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

没有办法让CLion自动添加源文件吗?我知道这没什么可增加的,但是如果你添加一个新的C++源或头文件,你可以检查“添加到目标”,然后选择要在CMAKLEST.TXT中添加文件的目标/可执行文件。但是目标必须已经在CMakeLists.txt文件中。@InvisibleUn1corn我同意,如果我们可以更容易地添加
add\u executable
,那就好了。为此,我为CLion“”制作了一个插件。