CMake添加不同目录文件的方法

三种使用CMake构建工程添加子目录的方法

文件目录结构

.
├── CMakeLists.txt
├── inc
│   ├── ansi_def.h
│   ├── ansi.h
│   ├── ansi_port.h
│   ├── nr_micro_shell_config.h
│   └── nr_micro_shell.h
├── main.c
├── nr_micro_shell_commands.c
└── src
    ├── ansi.c
    ├── ansi_port.c
    ├── CMakeLists.txt
    └── nr_micro_shell.c

2 directories, 12 files

1. src不需要添加CMakeLists.txt,直接使用aux_source_directory讲src目录添加进工程,根目录CMakeLists.txt内容:
cmake_minimum_required( VERSION 3.0 )

project (nr_micro VERSION 1.0 LANGUAGES C)

##############设置目标文件生成位置#####################
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
# define RUNTIME_INSTALL_DIR LIBRARY_INSTALL_DIR INCLUDE_INSTALL_DIR CONFIG_INSTALL_DIR
set (RUNTIME_INSTALL_DIR bin)
set (LIBRARY_INSTALL_DIR lib)
set (INCLUDE_INSTALL_DIR include)
#添加头文件包含路径
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc)
message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}/inc")
#添加src子目录
add_subdirectory(src)
#添加根目录的源文件
aux_source_directory(. _SOURCES)
#添加src子目录所有源文件
aux_source_directory(src _SUB_SOURCES)

#指定生成的目标,依赖于根目录和sub下所有的源文件
add_executable(nr_micro ${_SOURCES} ${_SUB_SOURCES})

2.子目录src的CMakeLists.txt传包含子目录所有文件变量给根目录CMakeLists.txt,来构建工程

根目录CMakeLists.txt:
cmake_minimum_required( VERSION 3.0 )
project (nr_micro VERSION 1.0 LANGUAGES C)

##############设置目标文件生成位置#####################
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
# define RUNTIME_INSTALL_DIR LIBRARY_INSTALL_DIR INCLUDE_INSTALL_DIR CONFIG_INSTALL_DIR
set (RUNTIME_INSTALL_DIR bin)
set (LIBRARY_INSTALL_DIR lib)
set (INCLUDE_INSTALL_DIR include)
#添加头文件包含路径
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc)
message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}/inc")
#添加src子目录
add_subdirectory(src)
#添加根目录的源文件
aux_source_directory(. _SOURCES)

#指定生成的目标,依赖于根目录_SOURCES内容和包含子目录内容的变量_SUB_SOURCES
add_executable(nr_micro ${_SOURCES} ${_SUB_SOURCES})
#add_executable(nr_micro ${_SOURCES})
子目录CMakeLists.txt:
#子目录所有文件赋值给 _SUB_SOURCES变量
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} _SUB_SOURCES)
message(STATUS _SUB_SOURCES=${_SUB_SOURCES})
#设置_SUB_SOURCES变量,让它能被根目录访问
set(_SUB_SOURCES ${_SUB_SOURCES} PARENT_SCOPE)

3.根目录CMakeLists.txt下包含根目录所有文件的变量,在子目录CMakeLists.txt中使用list APPEND追加内容,构建工程:

根目录CMakeLists.txt:
cmake_minimum_required( VERSION 3.0 )

project (nr_micro VERSION 1.0 LANGUAGES C)

##############设置目标文件生成位置#####################
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
# define RUNTIME_INSTALL_DIR LIBRARY_INSTALL_DIR INCLUDE_INSTALL_DIR CONFIG_INSTALL_DIR
set (RUNTIME_INSTALL_DIR bin)
set (LIBRARY_INSTALL_DIR lib)
set (INCLUDE_INSTALL_DIR include)

#添加头文件包含路径
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc)
message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}/inc")
#添加根目录的源文件
aux_source_directory(. _SOURCES)
#添加子文件目录
add_subdirectory(src)

#指定生成的目标,依赖于_SOURCES,此变量包含根目录和子目录所有文件
add_executable(nr_micro ${_SOURCES})



子目录CMakeLists.txt:
#添加子目录的源文件给_SUB_SOURCES
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} _SUB_SOURCES)
#将子目录源文件,追加给根目录_SOURCES变量
list(APPEND _SOURCES ${_SUB_SOURCES})
#设置根目录_SOURCES变量在子目录有效
set(_SOURCES ${_SOURCES} PARENT_SCOPE)
  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值