如何避免在CLion中将每个源文件添加到CMake?

时间:2016-05-05 10:21:19

标签: clion

大多数人从一些其他具有构建单个文件选项的IDE切换到CLion有点混淆,但没有选择。

那么如何避免将每个源文件的每个名称添加到CMake中?

5 个答案:

答案 0 :(得分:3)

您正在寻找的是file(GLOB_RECURSE *.cpp)。如果需要,您可以自定义此命令以过滤掉目录。

答案 1 :(得分:1)

我使用 CLION 在c ++和CMake上遇到了同样的问题。这就是我设法解决它的方法:

这是我的项目结构:

├── CMakeLists.txt
├── README.md
└── src
    └── ch01
        ├── ex01
        │   └── main.cpp
        └── ex02
            └── main.cpp

以下是CMakeLists.txt的内容:

cmake_minimum_required(VERSION 3.5)

project(CPPTutorial)

set(CMAKE_CXX_STANDARD 14)

set(sourceDir "${PROJECT_SOURCE_DIR}/src")

file(GLOB_RECURSE sourceFiles "${sourceDir}/*.cpp")

FOREACH (sourceFile ${sourceFiles})
    MESSAGE(STATUS "Process file: ${sourceFile}")

    get_filename_component(dir1 ${sourceFile} PATH)
    get_filename_component(dir1 ${dir1} NAME)

    get_filename_component(dir2 "${sourceFile}/../../" ABSOLUTE)
    get_filename_component(dir2 ${dir2} NAME)

    MESSAGE(STATUS "New target: ${dir2}_${dir1}")
    add_executable("${dir2}_${dir1}" ${sourceFile})
endforeach (sourceFile)

它为目录中的每个来源创建了一个新目标..实际上它需要更多工作,但它为我完成了工作。

限制:

  1. 每个子子目录的一个源文件
  2. 结构需要与AAA/BBB相同,其中AAA是父目录,BBB是它的子目录。
  3. 您可以在同一级别添加更多AAA,也可以添加更多BBB
  4. 希望有所帮助

答案 2 :(得分:1)

简而言之,您的 CMakeLists.txt 中需要如下一行:

file(GLOB_RECURSE SOURCES *.cc *.cpp)

这是我的 CMakeLists.txt 文件,用于查看和编辑 Chromium c++ 项目。

cmake_minimum_required(VERSION 3.17)
project(chromium)
set(CMAKE_CXX_STANDARD 11)
file(GLOB_RECURSE SOURCES *.cc)
include_directories(./)
add_executable(chromium ${SOURCES})

您可以使用 file(GLOB_RECURSE SOURCES *.cc) 来包含所有级别目录中匹配某些模式的所有文件。

附:

  • 使用 include_directories(./) 来支持 Chromium 标头包含规则。
  • 使用帮助 -> 更改内存设置为 Clion 提供 10GB 内存以避免 java gc 使用 100% cpu。(因为您的计算机需要超过 10GB 的物理内存。)(我测试了 5GB 内存是不够的铬)

答案 3 :(得分:0)

这是一个完整的例子。

" "

答案 4 :(得分:-1)

我写了一个模板cmake文件,我用它可以为你做这个。它会自动将源文件作为单独的可执行文件。

可以在此处找到Cmake模板:template file

您只需将其粘贴到CMakeLists.txt并刷新cmake即可。然后,您可以从下拉菜单中选择要运行的文件。

提示:为clion设置中的Cmake刷新添加键盘快捷键