首页 > 解决方案 > 在子目录 CMakeLists.txt 中添加编译器“#define”标志

问题描述

我的项目目录结构是用多个 CMakeLists.txts 构建的。

calculate.c 在我的 CMSIS_lib 中,我calculate.h使用CMSIS_lib/CMakeList.txt分别构建我的依赖源文件:

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 GUCCImy中的所有内容calculate.h,并且当添加到根 CMakeLists.txt 中时,target_link_libraries()我会没有正确定义所有配置。

我正在使用交叉编译器,并且在我toolchain.cmake使用命令定义编译器标志时SET_TARGET_PROPERTIES(${TARGET} PROPERTIES COMPILE_DEFINITIONS GUCCI}"),这为时已晚,因为这只能由我的根 CMakeLists.txt 看到,而不是由我的子主管 CMakeLists.txt 看到。

标签: cmake

解决方案


CMSIS_lib/CMakeLists.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_definitions(util PUBLIC GUCCI)

注意target_compile_definitions行,带有 PUBLIC 参数:它指示 cmake-DGUCCI在编译 util 时使用编译器选项,以及与 util 链接的所有目标。

还要注意 target_include_directories 的变化。您将头文件作为参数放置,但您应该放置目录。


推荐阅读