我正在使用一些外部stm32-cmake生成可以正常运行的项目,但是现在我尝试使用多个CMakeLists.txt文件创建自己的CMake项目。我不知道如何使用CMake设计项目,以便我的根用户可以看到所有子CMake文件并执行命令。我知道这可能是重复的问题,但我仍然不知道如何执行此操作。我尝试在目录中找到一些包含多cmakes文件的cmake示例,以便我可以指导自己进行此构建,但是我发现教程还更改了源项目文件,以便编译器可以找到诸如--include \*.py
这样的头文件,我不想更改它。
我在设计带有子目录的CMake项目时遇到问题。我的项目目录现在拥有以下组织:
#include root/sub-dir/header.h
在我的根目录CMakeLists.txt中,我有 ADD_EXECUTABLE()来生成最终的.elf文件。但这取决于其他子目录中的许多源文件,我在 add_subdirectory()中包括“ sub” CMakeLists.txt。我在CMake书中读到,那个大项目应该在子目录中还有其他CMakeLists.txt。
.
├── CMakeLists.txt
├── cmake
│ ├── toolchain.cmake
│ └── linker_script.cmake
├── Drivers
│ ├── CMSIS
│ │ ├── CMakeLists.txt
│ │ ├── Include
│ │ │ ├── arm_common_tables.h
│ │ │ ├── arm_const_structs.h
│ │ │ ├── arm_math.h
│ │ │ ├── core_cm4.h
│ │ └── STM32F4xx
│ │ ├── CMakeLists.txt
│ │ ├── Include
│ │ │ ├── stm32f407xx.h
│ │ │ ├── stm32f4xx.h
│ │ │ └── system_stm32f4xx.h
│ │ └── Source
│ │ └── Templates
│ │ ├── gcc
│ │ │ └── startup_stm32f407xx.s
│ │ └── system_stm32f4xx.c
│ └── HAL
│ ├── CMakeLists.txt
│ ├── Inc
│ │ ├── stm32f4xx_hal_adc.h
│ │ ├── stm32f4xx_hal_gpio.h
│ │ ├── stm32f4xx_hal.h
│ └── Src
│ ├── stm32f4xx_hal_adc.c
│ ├── stm32f4xx_hal.c
│ ├── stm32f4xx_hal_gpio.c
├── Inc
│ ├── flatbuffers_common_builder.h
│ ├── flatbuffers_common_reader.h
│ ├── main.h
│ ├── schema_meter_builder.h
│ ├── schema_meter_reader.h
│ ├── schema_meter_verifier.h
│ ├── stm32f4xx_hal_conf.h
│ └── stm32f4xx_it.h
├── lib
│ ├── libflatcc.a
│ ├── libflatccrt.a
└── Src
├── builder.c
├── main.c
├── stm32f4xx_hal_msp.c
├── stm32f4xx_it.c
└── system_stm32f4xx.c
我只希望我的子目录(如Driver / CMSIS CMakeLists.txt)仅包含所有(* .h)文件,以便我的根CMakeLists.txt可以看到它并链接到/ STM32F4xx中的另一个子目录。
#root
SET(CMAKE_TOOLCHAIN_FILE ${CMAKE_SOURCE_DIR}/cmake/toolchain.cmake)
SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
PROJECT(stm32f4discovery)
CMAKE_MINIMUM_REQUIRED(VERSION 3.4)
ENABLE_LANGUAGE(ASM)
add_subdirectory(Drivers/HAL)
add_subdirectory(Drivers/CMSIS)
INCLUDE_DIRECTORIES(
Inc
)
SET(PROJECT_SOURCES
Src/main.c
Src/stm32f4xx_hal_msp.c
Src/stm32f4xx_it.c
Src/builder.c
Inc/main.h
Inc/stm32f4xx_hal_conf.h
)
ADD_EXECUTABLE(${CMAKE_PROJECT_NAME}.elf ${PROJECT_SOURCES} ${CMSIS_SOURCES} ${STM32HAL_SOURCES})
target_link_libraries(${CMAKE_PROJECT_NAME}.elf c rdimon m gcc)
target_link_libraries(${CMAKE_PROJECT_NAME}.elf asd)
target_link_libraries(${CMAKE_PROJECT_NAME}.elf asdf)
在我的/ STM32F4xx CMakeLists.txt中,我尝试使用 add_library(),以便可以通过根CMakeLists.txt“查看”我的文件,但是它不起作用。现在看起来像那样。
#CMSIS
include_directories(Include)
add_subdirectory(STM32F4xx)
但是包含这样的源文件显然是错误的。