【问题标题】:Is it possible to configure CLion to compile source files in a project independently?是否可以配置 CLion 以独立编译项目中的源文件?
【发布时间】:2015-07-26 04:34:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: c compilation ide clion


    【解决方案1】:

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

    而不是

    add_executable(projecteuler ${SOURCE_FILES})
    

    你可以定义

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

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

    【讨论】:

    • 没有办法让CLion自动添加源吗?我知道添加它并不多,但它可能会更好
    • 如果您添加新的 C++ 源文件或头文件,您可以选中“添加到目标”,然后在 CMakeLists.txt 中选择要添加文件的目标/可执行文件。但目标必须已经在 CMakeLists.txt 文件中。
    • @InvisibleUn1corn 我同意如果我们可以更轻松地添加add_executable,那就太好了。为此,我为 CLion "C/C++ Single File Execution Plugin" 制作了一个插件。
    【解决方案2】:

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

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

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

    它会自动编辑你的 CMake 文件。

    链接:

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

    【讨论】:

      【解决方案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。

      【讨论】:

        【解决方案4】:

        您可以将这些行添加到您的 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),这样它只会构建这些文件。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多