cmake - 在子目录 CMakeLists.txt 中添加编译器“#define”标志
问题描述
我的项目目录结构是用多个 CMakeLists.txts 构建的。
根
- CMakeLists.txt
- 源
- 主程序
- CMSIS_lib
- 计算.c
- 计算.h
- CMakeLists.txt
制作
- 工具链.cmake
建造
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 GUCCI
my中的所有内容calculate.h
,并且当添加到根 CMakeLists.txt 中时,target_link_libraries()
我会没有正确定义所有配置。
我正在使用交叉编译器,并且在我toolchain.cmake
使用命令定义编译器标志时SET_TARGET_PROPERTIES(${TARGET} PROPERTIES COMPILE_DEFINITIONS GUCCI}")
,这为时已晚,因为这只能由我的根 CMakeLists.txt 看到,而不是由我的子主管 CMakeLists.txt 看到。
解决方案
你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 的变化。您将头文件作为参数放置,但您应该放置目录。
推荐阅读
- visual-studio - SSAS 多维数据集和表格模型之间的日期不一致
- javascript - 在 JQuery 中,如何仅通过单击按钮而不是整个元素来删除 li 元素?
- wildfly - Wildfly 8.2.1 类加载器问题
- android - 在 Phonegap 混合应用程序中使用 cordova-plugin-camera 时添加相机权限
- java - WebView 仅显示网站的一部分/隐藏网站的一部分
- android - 类名前面的播放测试图标附近的感叹号是什么意思。浓咖啡。测试
- aws-vpc - 静态私有 IP 是否从 AWS VPC DHCP 池中排除?
- tensorflow - 加载的 MobileNet 模型给出错误的预测
- ios - Swift Casting 到协议返回 nil
- node.js - ECONNRESET 每 2 小时发生一次,用于连接到 redis 使用 nodejs