环境:Cmake,VScode,VScode的Cmake Tools插件
目录结构:
├── CMakeLists.txt
├── build
├── a
│ ├── CMakeLists.txt
│ ├── a.c
│ └── a.h
│ ├── a1
│ │ ├── CMakeLists.txt
│ │ ├── a1.c
│ │ └── a1.h
├── b
│ ├── CMakeLists.txt
│ ├── b.c
│ └── b.h
│ ├── b1
│ │ ├── CMakeLists.txt
│ │ ├── b1.c
│ │ └── b1.h
└── main.c
- 使用include makelist方法:
#顶层Cmakelist:
include(${CMAKE_CURRENT_LIST_DIR}/a/CMakeLists.txt)
include(${CMAKE_CURRENT_LIST_DIR}/a/a1/CMakeLists.txt)
include(${CMAKE_CURRENT_LIST_DIR}/b/CMakeLists.txt)
include(${CMAKE_CURRENT_LIST_DIR}/b/b1/CMakeLists.txt)
aux_source_directory(. ALL_SRCS)
add_executable(hello_simple ${ALL_SRCS})#指定生成目标、源文件
message("end = ${ALL_SRCS}") #打印./main.c 和其他源文件的绝对路径
#a/Cmakelist:(其他目录的Cmakelist都相同)
include_directories(${CMAKE_CURRENT_LIST_DIR}) # 增加头文件搜索路径
aux_source_directory(${CMAKE_CURRENT_LIST_DIR} ALL_SRCS)
缺点:当目录结构发生变化时,需要修改顶层Cmakelist
- 方法2:传递全局变量
#顶层Cmakelist:
aux_source_directory(. ALL_SRCS)
set_property(GLOBAL PROPERTY INCLUDE_DIR ${PROJECT_SOURCE_DIR})
set_property(GLOBAL PROPERTY SRC_DIR ${ALL_SRCS})
add_subdirectory(a) # 包含下级子目录math
add_subdirectory(b)
get_property(my_INCLUDE_DIR GLOBAL PROPERTY INCLUDE_DIR)
get_property(my_SRC_DIR GLOBAL PROPERTY SRC_DIR)
include_directories(${my_INCLUDE_DIR})
add_executable(hello_simple ${my_SRC_DIR})#指定生成目标、源文件
#a/Cmakelist:(其他目录的Cmakelist类似)
aux_source_directory(${CMAKE_CURRENT_LIST_DIR} ALL_SRCS)
add_subdirectory(a1) # 包含下级子目录
set_property(GLOBAL APPEND PROPERTY INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR})
set_property(GLOBAL APPEND PROPERTY SRC_DIR ${ALL_SRCS})
使用:
选择编译器和一键build:
编译完成: