【问题标题】:Adding compiler "#define" flags in sub_directory CMakeLists.txt在子目录 CMakeLists.txt 中添加编译器“#define”标志
【发布时间】:2018-12-13 22:20:14
【问题描述】:

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

    • CMakeLists.txt
      • main.c
    • CMSIS_lib
      • calculate.c
      • 计算.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)

问题是我必须告诉我的编译器在我的calculate.h 中添加一个#define GUCCI(在MakeFile 中,我知道有一个标志告诉标题用-DGUCCI 定义)。我想在我的 CMSIS_lib/CMakeList.txt 中将这个标志添加到我的编译器中,因为当第一个 CMSIS_lib/CMakeList.txt 完成构建时,他将跳过我的 #ifndef GUCCI 下的所有内容 @987654329 @,当在根 CMakeLists.txt 中添加 target_link_libraries() 时,我将无法正确定义所有配置。

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

【问题讨论】:

    标签: cmake


    【解决方案1】:

    您的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在编译util时使用-DGUCCI编译器选项,以及与util链接的所有目标。

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

    【讨论】:

    • 答案是正确的,但是“target_compile_definitions”中有一个错字,“difinitions”中缺少一个“i”。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 2022-07-14
    相关资源
    最近更新 更多