qbs avr编译

时间:2017-02-21 11:33:40

标签: qbs

我尝试使用qbs

构建简单项目
import qbs
Project {
    name: "simple"
    Product {
        name: "micro"
        type: "obj"
        Group {
            name: "sources"
            files: ["main.c", "*.h", "*.S"]
            fileTags: ['c']
        }
        Rule {
            inputs: ["c"]
            Artifact {
                fileTags: ['obj']
                filePath: input.fileName + '.o'
            }
            prepare: {
                var args = [];
                args.push("-g")
                args.push("-Os")
                args.push("-w")
                args.push("-fno-exceptions")
                args.push("-ffunction-sections")
                args.push("-fdata-sections")
                args.push("-MMD")
                args.push("-mmcu=atmega328p")
                args.push("-DF_CPU=16000000L")
                args.push("-DARDUINO=152")
                args.push("-IC:/Programs/arduino/hardware/arduino/avr/cores/arduino")
                args.push("-IC:/Programs/arduino/hardware/arduino/avr/variants/standard")
                args.push("-c")
                args.push(input.fileName)
                args.push("-o")
                args.push(input.fileName + ".o")
                var compilerPath = "C:/Programs/arduino/hardware/tools/avr/bin/avr-g++.exe"
                var cmd = new Command(compilerPath, args);
                cmd.description = 'compiling ' + input.fileName;
                cmd.highlight = 'compiler';
                cmd.silent = false;
                console.error(input.baseDir + '/' + input.fileName);
                return cmd;
            }
        }
    }
}

我收到错误

compiling main.c
C:/Programs/arduino/hardware/tools/avr/bin/avr-g++.exe -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD "-mmcu=atmega328p" "-DF_CPU=16000000L" "-DARDUINO=152" -IC:/Programs/arduino/hardware/arduino/avr/cores/arduino -IC:/Programs/arduino/hardware/arduino/avr/variants/standard -c main.c -o main.c.o
avr-g++.exe: main.c: No such file or directory
avr-g++.exe: no input files
Process failed with exit code 1.
The following products could not be built for configuration qtc_avr_f84c45e7-release:
    micro

我错了什么?

文件main.c出现在项目和目录中。

如果我从命令提示符启动此命令,则不会收到错误。

2 个答案:

答案 0 :(得分:3)

简而言之,您需要在-c和-o之后传递input.filePath,而不是input.fileName。无法保证调用的命令的工作目录将是源目录的工作目录。

可以设置Command对象的workingDirectory,但通常不推荐这样做,因为除非绝对必要,否则您的命令应独立于工作目录。

此外,您似乎正在复制cpp模块的功能。相反,您的项目应如下所示:

import qbs
Project {
    name: "simple"
    Product {
        Depends { name: "cpp" }
        name: "micro"
        type: "obj"
        Group {
            name: "sources"
            files: ["main.c", "*.h", "*.S"]
            fileTags: ['c']
        }
        cpp.debugInformation: true // passes -g
        cpp.optimization: "small" // passes -Os
        cpp.warningLevel: "none" // passes -w
        cpp.enableExceptions: false // passes -fno-exceptions
        cpp.commonCompilerFlags: [
            "-ffunction-sections",
            "-fdata-sections",
            "-MMD",
            "-mmcu=atmega328p"
        ]
        cpp.defines: [
            "F_CPU=16000000L",
            "ARDUINO=152"
        ]
        cpp.includePaths: [
            "C:/Programs/arduino/hardware/arduino/avr/cores/arduino",
            "C:/Programs/arduino/hardware/arduino/avr/variants/standard
        ]
        cpp.toolchainInstallPath: "C:/Programs/arduino/hardware/tools/avr/bin"
        cpp.cxxCompilerName: "avr-g++.exe"
    }
}

答案 1 :(得分:0)

它的工作 args.push("-c") args.push(input.filePath) at you args.push(input.fileName) args.push("-o") args.push(output.filePath)你args.push(input.fileName)