我的项目目录结构是使用多个CMakeLists.txts构建的。
根
cmake
构建
在我的CMSIS_lib中,我使用 CMSIS_lib / CMakeList.txt 分别构建我的依赖源文件calculate.c
和calculate.h
:
set(util_source_files
calculate.c
calculate.h
)
add_library(util ${util_source_files})
target_include_directories(util calculate.h)
在我的根 CMakeLists.txt :
cmake_minimum_required(VERSION 3.4)
project(main_projct)
set(TOOLCHAIN_PREFIX /opt/gcc-arm-none-eabi)
set(CMAKE_TOOLCHAIN_FILE cmake/toolchain.cmake)
add_subdirectory(CMSIS_lib)
add_executable(main_projct main.c)
target_link_libraries(main_projct util)
问题是我必须告诉编译器在我的#define GUCCI
中添加一个calculate.h
(在MakeFile中,我知道有标记来告诉标头-DGUCCI
的标志)。我想将此标志添加到我的 CMSIS_lib / CMakeList.txt 中的编译器中,因为当第一个CMSIS_lib / CMakeList.txt构建完成时,他将跳过我的#ifndef GUCCI
下的所有内容calculate.h
,并用target_link_libraries()
添加到根CMakeLists.txt中时,我将无法正确定义所有定义。
我正在使用交叉编译器,并且在我的toolchain.cmake
中使用命令SET_TARGET_PROPERTIES(${TARGET} PROPERTIES COMPILE_DEFINITIONS GUCCI}")
来定义编译器标志,但这很晚,因为这只能由我的根CMakeLists.txt看到,而不能由我的副总监CMakeLists.txt。
答案 0 :(得分:1)
您的 CMSIS_lib / CMakeList.txt 应该如下所示:
set(util_source_files
calculate.c
calculate.h
)
add_library(util ${util_source_files})
target_include_directories(util ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_defintions(util PUBLIC GUCCI)
note target_compile_definitions 行,带有PUBLIC参数:它指示cmake在编译util时使用 -DGUCCI 编译器选项,以及与util链接的所有目标。
还请注意target_include_directories中的更改。您将头文件放置为参数,但应放置目录。