是否可以配置CLion独立编译项目中的源文件?
Is it possible to configure CLion to compile source files in a project independently?
我目前正在使用 JetBrains CLion IDE 在 C 中完成一些 Project Euler 挑战。当我在 Python 和 Java(分别在 PyCharm 和 IntelliJ)中完成这些时,我总是能够创建一个名为 "ProjectEuler" 的项目并添加任意数量的源代码我可以独立执行的文件。但是,在 CLion 中似乎不可能做到这一点。我用来解决问题的每个源文件都包含一个 main() 函数,每次我尝试编译时 CMake 对此都不满意 ("multiple definition of '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)
然后您为每个可执行文件(问题 1、问题 2 等)获得一个 运行 配置,您可以独立地 运行。在这种情况下,您不必每次都重写,而只需将新的源文件添加到新的可执行文件中即可。
您可以使用
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)
。但请记住,强烈不鼓励这种 "trick"。
这也会自动将构建配置添加到 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)
,这样它将只构建那些文件。
即使我遇到了同样的问题,每次编辑 CMake 文件并添加可执行文件也是一项累人的工作。所以我找到了解决办法,
有一个插件可以为您无缝完成。
只需将此 plugin 添加到您的 CLion 中,无论您想制作哪个文件都是可执行文件,请右键单击并将其添加为可执行文件,
它将自动编辑您的 CMake 文件。
Link:
https://plugins.jetbrains.com/plugin/8352-c-c--single-file-execution
在 CMakeLists.txt 中为每个源文件添加可执行文件后,必须按右上角的 Reload
按钮重新加载文件,然后将 run debug configuration
设置为他想要的源文件名想 运行.
我目前正在使用 JetBrains CLion IDE 在 C 中完成一些 Project Euler 挑战。当我在 Python 和 Java(分别在 PyCharm 和 IntelliJ)中完成这些时,我总是能够创建一个名为 "ProjectEuler" 的项目并添加任意数量的源代码我可以独立执行的文件。但是,在 CLion 中似乎不可能做到这一点。我用来解决问题的每个源文件都包含一个 main() 函数,每次我尝试编译时 CMake 对此都不满意 ("multiple definition of '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)
然后您为每个可执行文件(问题 1、问题 2 等)获得一个 运行 配置,您可以独立地 运行。在这种情况下,您不必每次都重写,而只需将新的源文件添加到新的可执行文件中即可。
您可以使用
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)
。但请记住,强烈不鼓励这种 "trick"。
这也会自动将构建配置添加到 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)
,这样它将只构建那些文件。
即使我遇到了同样的问题,每次编辑 CMake 文件并添加可执行文件也是一项累人的工作。所以我找到了解决办法,
有一个插件可以为您无缝完成。
只需将此 plugin 添加到您的 CLion 中,无论您想制作哪个文件都是可执行文件,请右键单击并将其添加为可执行文件,
它将自动编辑您的 CMake 文件。
Link:
https://plugins.jetbrains.com/plugin/8352-c-c--single-file-execution
在 CMakeLists.txt 中为每个源文件添加可执行文件后,必须按右上角的 Reload
按钮重新加载文件,然后将 run debug configuration
设置为他想要的源文件名想 运行.