首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bitbake自动工具找不到makefile

Bitbake自动工具找不到makefile
EN

Stack Overflow用户
提问于 2022-03-07 22:38:40
回答 1查看 526关注 0票数 0

我正在尝试使用自动工具来构建我的项目。我正在使用Yocto和bitbake来制作Linux映像。

我阅读了一些自动教程,并遵循了我在GitHub上找到的基本指南。这与我目前的项目不太好。

我的项目结构如下:

代码语言:javascript
复制
michael@michael-VirtualBox:~/Documents/MAIN_custom/MAIN_layers/meta-MAINapplication/recipes-core/MAIN_Application$ tree
.
├── files
│   ├── MAIN_Application
│   │   ├── autogen.sh
│   │   ├── configure.ac
│   │   ├── Makefile.am
│   │   ├── project.yml
│   │   ├── src
│   │   │   ├── include
│   │   │   │   ├── main.h
│   │   │   │   ├── scheduler.h
│   │   │   │   └── utilities
│   │   │   │       └── time_conversions.h
│   │   │   └── src
│   │   │       ├── main.c
│   │   │       ├── scheduler.c
│   │   │       └── utilities
│   │   │           └── time_conversions.c
│   │   └── test
│   │       ├── test_scheduler.c
│   │       └── test_time_conversions.c
│   └── services
│       └── mainapplication.service
└── mainapplication_0.0.bb

autogen.sh:

代码语言:javascript
复制
#!/bin/sh

echo "Generating configure files... may take a while."

autoreconf --install --force && \
  echo "Preparing was successful if there was no error messages above." && \
  echo "Now type:" && \
  echo "  ./configure && make"  && \
  echo "Run './configure --help' for more information"

Makefile.am

代码语言:javascript
复制
AUTOMAKE_OPTIONS = foreign

CFLAGS = -Wall -pedantic -O2
include_HEADERS = main.h

bin_PROGRAMS = EVCC_Application
EVCC_Application_SOURCES = main.c

configure.ac

代码语言:javascript
复制
#                                               -*- Autoconf -*-
AC_PREREQ(2.60)
AC_INIT([EVCC_Application],[0.0.1],[michaelminer@smartrendmfg.com])
AM_INIT_AUTOMAKE([1.9 foreign])
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_MAKE_SET
AM_SILENT_RULES([yes])

AC_CONFIG_MACRO_DIRS([m4])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

我的bb文件也很简单:

代码语言:javascript
复制
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

FILESEXTRAPATHS:prepend := "${THISDIR}/files/MAIN_Application:"
FILESEXTRAPATHS:prepend := "${THISDIR}/files/MAIN_Application/src:"
FILESEXTRAPATHS:prepend := "${THISDIR}/files/services:"

SRC_URI = "\
    file://mainapplication.service \
    file://src/utilities/time_conversions.c \
    file://src/main.c \ 
    file://src/scheduler.c \    
    file://include/main.h \ 
    file://include/scheduler.h \        
    file://include/utilities/time_conversions.h \   
    file://Makefile \   
    "

inherit systemd autotools

S = "${WORKDIR}"

SYSTEMD_SERVICE_${PN} = "mainapplication.service"

do_install_append () {
    install -d ${D}${systemd_system_unitdir}
    install -m 0644 ${S}/mainapplication.service ${D}${systemd_system_unitdir}
    sed -i -e 's,@BINDIR@,${bindir},g' ${D}${systemd_system_unitdir}/mainapplication.service
}

当我在终端中运行autogen.sh时,会得到以下输出:

代码语言:javascript
复制
configure.ac:4: installing './compile'
configure.ac:2: installing './install-sh'
configure.ac:2: installing './missing'
Makefile.am: installing './depcomp'
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of gcc... gcc3
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: executing depfiles commands

有人能解释为什么我的比特面包构建报告说它找不到Makefile。

编辑: Bitbake找不到我的Makefile,因为它不存在。我有一个Makefile.am。当我将这个重命名为Makefile时,我会得到一个oe_runmake错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-08 13:49:42

以下是我的意见:

我建议在没有指定FILESEXTRAPATHS的情况下指定完整的项目文件夹

代码语言:javascript
复制
SRC_URI = "file://MAIN_Application"
SRC_URI += "file://services/"

然后,需要将S变量指定到源文件文件夹:

代码语言:javascript
复制
S = "${WORKDIR}/MAIN_Application"

另外,请注意,autotools类将尝试在${S}中查找下列文件之一

  • Makefile
  • makefile
  • GNUmakefile

如果存在,它将运行oe_runmake clean

因此,请确保正确命名Makefile并向其添加clean目标。

关于autotools如何在这个链接中检查类的更详细信息

编辑

为了确保一切顺利,手动运行以下任务:

  • 检查S变量值:
代码语言:javascript
复制
bitbake -e mainapplication | grep ^S=
  • S下解压缩和检查文件
代码语言:javascript
复制
bitbake mainapplication -c unpack

您需要看到文件夹MAIN_Application及其内容。

  • 尝试在autotools之前继承systemd

EDIT2

我试图为您的Github示例链接创建一个菜谱,下面是最后的菜谱:

代码语言:javascript
复制
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=96af5705d6f64a88e035781ef00e98a8"
SRC_URI = "git://github.com/DynamicDevices/bbexample;protocol=https"
PV = "0.1+git${SRCPV}"
SRCREV = "b9fb7785e9e1f357f29bef63dce8f1d91adb6170"
S = "${WORKDIR}/git"
inherit autotools
EXTRA_OECONF = ""

它编译正确,因此,对于您的情况,只需设置:

代码语言:javascript
复制
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = "\
    file://MAIN_Application \
    file://services \ 
    "

inherit autotools systemd

S = "${WORKDIR}/MAIN_Application"

SYSTEMD_SERVICE_${PN} = "mainapplication.service"

do_install_append () {
    install -d ${D}${systemd_system_unitdir}
    install -m 0644 ${WORKDIR}/services/mainapplication.service ${D}${systemd_system_unitdir}
    sed -i -e 's,@BINDIR@,${bindir},g' ${D}${systemd_system_unitdir}/mainapplication.service
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71388067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档