gcc - cmake 总是在导入的接口目标上使用 `-isystem`
问题描述
我正在尝试编写一个 CMakeLists.txt 来编译我的 Arduino-Projects 以更好地了解 cmake。我将 Arduino-Core 库定义为一个导入的接口,并尝试将我自己的目标链接到它。问题是,当调用make
avr-gcc 时,提供了指定的包含路径,-isystem
而不是-I
. 这会导致几个错误。
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 不允许这样做。
提前感谢您的每一个提示。
PS请注意,我知道,这不会编译我的arduino代码。这只是一个 mcve 向您展示我的问题。
编辑
我正在使用 Arduino-SDK 1.8.13 和 cmake 3.18.2
解决方案
推荐阅读
- javascript - 单击按钮时出现错误
- ubuntu - 我的 HTTPS (SSL/TLS) nginx 配置给了我超时
- supabase - 如何在 Supabase 中使用 join 进行查询?
- python - Django html table - 如何指定/定位某个单元格?
- r - 从 R 中的包“mcp”输出中绘制 50% 分位数和可信区间
- database - 根据时间戳 Kusto Query 删除重复项
- loops - 如何在 Hugo 中列出一个部分的所有页面
- database - 将 Firebase 数据库数组返回到另一个函数但返回空
- ios - 如何在我的静态清单中使用 Codable 将 UIButton IBAction 快速保存到 UserDefaults?
- html - 有没有更简单的方法来使用一张图片,但在网站上多次显示,位置不同?