¿Cómo construir cuando múltiples archivos de origen en rootfs en Linux incrustado?

Tengo una aplicación c simple

Archivo ctest.c

#include  #include "new.h" #include "new.c" int main() { switching(); return 0; } 

y tengo esos archivos new.c y new.h

archivo new.h como

 void switching(); 

y mi archivo new.c como

 void switching(){ char grade ='B'; switch(grade){ case 'A': printf("Excellent\n"); break; case 'B': printf("Super\n"); break; case 'C': printf("Well done\n"); break; case 'D': printf("You passed\n"); break; case 'F': printf("Better try again"); break; default: printf("invalid grade"); break; } printf("your grade is %c \n",grade); } 

Cuando trato de usar comandos de comstackción en mi herramienta de linux incrustada para comstackr y generar un binario, la construcción falla y aquí está mi archivo de make modificado para la aplicación en rootfs.

Hacer archivo para la aplicación Ctest:

 APP = Ctest # Add any other object files to this list below APP_OBJS = Ctest.o APP_OBJS += new.o all: build build: $(APP) $(APP): $(APP_OBJS) $(CC) $(LDFLAGS) -o [email protected] $(APP_OBJS) $(LDLIBS) 

Aquí está mi registro de errores durante el tiempo de comstackción

  DEBUG: Executing shell function do_compile NOTE: make -j 4 ERROR: oe_runmake failed aarch64-xilinx-linux-gcc --sysroot=/home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/sysroots/plnx_aarch64 -O2 -pipe -g -feliminate-unused-debug-types -fdebug-prefix-map=/home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/work/aarch64-xilinx-linux/Ctest/1.0-r0=/usr/src/debug/Ctest/1.0-r0 -fdebug-prefix-map=/home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/sysroots/x86_64-linux= -fdebug-prefix-map=/home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/sysroots/plnx_aarch64= -c -o Ctest.o Ctest.c aarch64-xilinx-linux-gcc --sysroot=/home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/sysroots/plnx_aarch64 -O2 -pipe -g -feliminate-unused-debug-types -fdebug-prefix-map=/home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/work/aarch64-xilinx-linux/Ctest/1.0-r0=/usr/src/debug/Ctest/1.0-r0 -fdebug-prefix-map=/home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/sysroots/x86_64-linux= -fdebug-prefix-map=/home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/sysroots/plnx_aarch64= -c -o new.o new.c new.c: In function 'switching': new.c:5:13: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration] printf("Excellent\n"); ^~~~~~ new.c:5:13: warning: incompatible implicit declaration of built-in function 'printf' new.c:5:13: note: include '' or provide a declaration of 'printf' new.c:24:5: warning: incompatible implicit declaration of built-in function 'printf' printf("your grade is %c \n",grade); ^~~~~~ new.c:24:5: note: include '' or provide a declaration of 'printf' Ctest.c:33:17: fatal error: new.h: No such file or directory #include "new.h" ^ comstacktion terminated. make: *** [: Ctest.o] Error 1 make: *** Waiting for unfinished jobs.... ERROR: Function failed: do_compile (log file is located at /home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/work/aarch64-xilinx-linux/Ctest/1.0-r0/temp/log.do_compile.19737) 

Entendí que necesito hacer cambios en el archivo make o en el archivo bitbake que comstack la aplicación, es decir, el archivo Ctest.bb. De ser así, ¿cuáles son los cambios? Y estoy usando petalinux 2017.1

El archivo bitbake de la aplicación es

 # # This file is the Ctest recipe. # SUMMARY = "Simple Ctest application" SECTION = "PETALINUX/apps" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" SRC_URI = "file://Ctest.c \ file://new.c \ file://Makefile \ " S = "${WORKDIR}" do_compile() { oe_runmake } do_install() { install -d ${D}${bindir} install -m 0755 Ctest ${D}${bindir} install -m 0755 new ${D}${bindir} } 

¿Cómo puedo incluir el archivo new.h en el archivo make o debo cambiar el archivo bitbake?

Su archivo Ctest.c incluye new.c por lo que no debe intentar crear new.o en absoluto. Quitar la linea

 APP_OBJS += new.o 

y

 install -m 0755 new ${D}${bindir} 

No está proporcionando el archivo new.h en su SRC_URI. Cambiarlo a

 SRC_URI = "file://Ctest.c \ file://new.c \ file://new.h \ file://Makefile \ "