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

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

有没有办法将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}) 

如果要在编译中自动添加文件,可以使用file(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)。 如果添加更多文件,构建时间也会增加。 您可以选择创建更多目录和子目录并使用file(GLOB_RECURSE APP_SOURCES path/to/*.c)这样它就只能构建那些文件。