cmake始终在导入的接口目标上使用`-isystem`

问题描述

我正在尝试编写CMakeLists.txt来编译我的Arduino项目,以更好地了解cmake。 我将Arduino-Core库定义为导入的接口,然后尝试将自己的目标链接到该库。问题是,当调用make时,通过-isystem而不是-I为avr-gcc提供了指定的包含路径。这会导致几个错误

CMakeLists.txt(用于还原问题的最小版本)

cmake_minimum_required(VERSION 3.1)
set(ARDUINO_DIR "/opt/arduino/arduino-1.8.13")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_C_COMPILER ${ARDUINO_DIR}/hardware/tools/avr/bin/avr-gcc)
set(CMAKE_CXX_COMPILER ${ARDUINO_DIR}/hardware/tools/avr/bin/avr-g++)
set(CMAKE_SYstem_NAME NONE)
set(CMAKE_SYstem_PROCESSOR NONE)

add_library(Arduino::Core INTERFACE IMPORTED)
target_include_directories(Arduino::Core INTERFACE 
  "${ARDUINO_DIR}/hardware/arduino/avr/cores/arduino/"
  "${ARDUINO_DIR}/hardware/arduino/avr/variants/eightanaloginputs/"
)
file(GLOB_RECURSE ARDUINO_CORE_SRC "${ARDUINO_DIR}/hardware/arduino/avr/cores/arduino/*.c[p]*")
file(GLOB_RECURSE ARDUINO_CORE_ASM "${ARDUINO_DIR}/hardware/arduino/avr/cores/arduino/*.S")
target_sources(Arduino::Core INTERFACE ${ARDUINO_CORE_SRC} ${ARDUINO_CORE_ASM})
project(Blinky)

set(${PROJECT_NAME}_SRC
  src/Blink.cpp
)
add_executable(${PROJECT_NAME} ${${PROJECT_NAME}_SRC})
target_link_libraries(${PROJECT_NAME} Arduino::Core)

这是我的Blink.cpp:

#include <Arduino.h>
void setup()
{
  pinMode(13,OUTPUT);
}
void loop()
{
  digitalWrite(13,HIGH);
  delay(1000);
  digitalWrite(13,LOW);
  delay(1000);
}

make --trace提供了以下输出

[  5%] Building CXX object CMakeFiles/Blinky.dir/src/Blink.cpp.obj
/opt/arduino/arduino-1.8.13/hardware/tools/avr/bin/avr-g++  -isystem     /opt/arduino/arduino-1.8.13/hardware/arduino/avr/cores/arduino -isystem /opt/arduino/arduino-1.8.13/hardware/arduino/avr/variants/eightanaloginputs -std=gnu++11 -o CMakeFiles/Blinky.dir/src/Blink.cpp.obj -c /tmp/so/src/Blink.cpp

如您所见,即使没有在任何地方声明-isystem,针对导入目标的链接也包含与SYstem的依赖关系?我该如何预防呢? 是因为它是INTERFACE IMPORTED目标? 我尝试了taget_include_directories(Arduino::Core PRIVATE ${my_include_dirs}),但显然INTERFACE-Targets不允许这样做。

预先感谢每一个提示

P.S。请注意,我知道,这不会编译我的arduino代码。这只是向您展示我的问题的方法

编辑

我正在使用Arduino-SDK 1.8.13和cmake 3.18.2

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)