【问题标题】:CDT Parse Makefile OutputCDT 解析 Makefile 输出
【发布时间】:2014-04-22 22:03:31
【问题描述】:

我使用 Eclipse 作为 IDE 来帮助我开发 Arduino 程序。我正在使用Arduino Makefile 来构建我的项目并让Eclipse 使用“外部”生成文件。 makefile 非常深入,它在构建过程中设置构建变量。然而,CDT 错误高亮显示错误,因为 makefile 设置了构建变量。有没有办法让 Eclipse 运行 makefile,然后解析输出以查看项目中是否有任何错误?

生成文件

BOARD_TAG    = uno
MONITOR_PORT = /dev/ttyACM*

include $(ARDMK_DIR)/Arduino.mk

【问题讨论】:

    标签: c eclipse makefile eclipse-cdt


    【解决方案1】:

    据我所知,没有!无论如何,这将是一项艰巨的任务,因为 CDT 管理的 make 构建具有递归性质。如果您愿意,您可以在 C/C++ General->Preprocessor Include Paths->Entries->GNU C->CDT User Settings Entries(视为内置)下定义预处理器符号。

    建议的解决方案

    • 在使用某种 bash 脚本进行编译之前,让您的 ma​​kefile 生成包含这些值的头文件

    实施示例

    我现在工作的主要项目使用 Eclipse-CDT-External-Makefile。我们有几个“CONFIG_DO_ABC”类型变量。我们生成一个 config.h。这是一个简化的示例。

    生成文件

    include config.mk
    
    all:
        ./config.awk config.mk > config.h
        gcc main.c -o main.o    
    
    clean:
        rm -r *.o main
    

    config.mk

    CONFIG_A  := 1
    CONFIG_B  := 2
    CONFIG_C  := 3
    

    config.awk

    #!/usr/bin/awk -f
    BEGIN {
        print "/* Generated by config.awk; do not edit */"
        print "#ifndef CONFIG_H"
        print "#define CONFIG_H"
    }
    $1 ~ /^CONFIG_/ && $2 ~ /^:?=$/ { print "#define", $1, $3 }
    END { print "#endif" }
    

    ma​​in.c(示例)

    #include "config.h"
    
    int main (void) {
        return CONFIG_A;
    }
    

    (制作控制台输出)

    make all 
    ./config.awk config.mk > config.h
    gcc main.c -o main.o    
    

    这对我的用例非常有效,尤其是对于#ifdef vars(例如#ifdef HALT_ON_BUG 或其他东西)。

    您必须使用比此处的 config.awk 更复杂的脚本来使用字符串;但希望这足以开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 2016-11-02
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多