CMakeLists.txt结构

时间:2018-08-17 16:28:39

标签: c++ makefile cmake

我想开始一个cmake项目,并且我有很多文件。结构如下。

types.h包含在functions.hdag.h

functions.h包含在basic.cpp, br.cpp, IR.cppUIR.cpp

functions.hdag.h包含在dag.cpp, dag-cmp.cpp, dag-cover.cpp, dag-make.cppdag-sum.cpp

很显然,我在同一目录中还有一个main.cpp,其中包括types.h, dag.hfunctions.h

哪个是CMakeLists.txt和cmake项目的最佳解决方案?

3 个答案:

答案 0 :(得分:0)

cmake_minimum_required(VERSION 3.12)
project(myproject)

set(CMAKE_CXX_STANDARD 14)

add_executable(myproject all.cpp all.h)
  1. 这可能是一种可能的格式。输入以空格分隔的.cpp和.h 文件。如果cpp / .h文件包含空格,则将其写入两倍 引号。

  2. 您可以根据自己的需要编辑C ++ Standard。

  3. 这是一个非常基本的设置, 随时根据您的要求添加内容。

答案 1 :(得分:0)

我不认为,有最好的解决方案,但是我更喜欢以下内容:

cmake_minimum_required(VERSION 3.12)
project(myproject)

set(SOURCE_FILES
    basic.cpp
    br.cpp
    IR.cpp
    UIR.cpp
    dag.cpp
    dag-cmp.cpp
    dag-cover.cpp
    dag-make.cpp
    dag-sum.cpp
    main.cpp
)

set(HEADER_FILES
    types.h
    functions.h
    dag.h
)

add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${HEADER_FILES})

target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_14)
  • 使用变量${PROJECT_NAME}可以轻松更改项目名称,因为您只需更改一次即可。
  • 包括所有头文件和源文件,可使IDE知道这些文件属于项目。
  • 设置目标属性应优先于更改CMake变量。因此,我鼓励使用target_compile_features代替set(CMAKE_CXX_STANDARD 14)

答案 2 :(得分:-1)

请考虑所有文件都位于src /文件夹中。 CMake可以自动列出它们:

file(GLOB_RECURSE source_files src/*)
add_executable(exec ${source_files})

第一行将在src文件夹(及其子文件夹)中查找所有文件,并将列表存储在source_files var中。 第二行将从source_files var加载文件并将其添加到可执行文件“ exec”