在子目录CMakeLists.txt中添加编译器“ #define”标志

时间:2018-12-13 22:20:14

标签: cmake

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

    • CMakeLists.txt
    • Src
      • main.c
    • CMSIS_lib
      • calculate.c
      • calculate.h
      • CMakeLists.txt
    • cmake

      • toolchain.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。

1 个答案:

答案 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中的更改。您将头文件放置为参数,但应放置目录。