使用 makefile 编译代码时出现错误。使用控制台工作
Getting errors when compiling code using makefile. Works using console
我在使用 makefile 构建我的项目时遇到编译错误,而在使用控制台构建时我没有看到。
我正在为 PowerPC 使用预构建的 GNU 工具链。
这是我的 makefile,
GCC_Assembler = powerpc-eabi-as
GCC_Compiler = powerpc-eabi-gcc
Directory_Application :=$(argument)/Source_Files
Directory_Bootloader :=$(argument)/Source_Files
Directory_RAMBootloader :=$(argument)/Source_Files
Application_Source_Files := $(wildcard $(Directory_Application)/*.C)
Application_Source_Files_Objecs=$(Application_Source_Files:.C=.O)
default: Build_Application
all: Build_Application
Build_Application: $(Application_Source_Files_Objecs)
$(Application_Source_Files_Objecs) : %.O: %.C
$(GCC_Compiler) -c $< -o $@ -O1 -Wall -Wfatal-errors
当我尝试使用这些命令构建它时,它构建没有错误。
CD %WORKSPACE%\Source Files
powerpc-eabi-gcc debug.c -c -odebug.o -O1 -Wall -Wfatal-errors
powerpc-eabi-gcc io.c -c -oio.o -O1 -Wall -Wfatal-errors
...
...
所以,当使用 makefile 构建时,我收到一个函数未正确声明的错误。见下图
/Debug.C: infunction 'void display_task_table()':
/Debug.C:627:18: error: 'task_wait' was not declared in this scope
task_wait(100*2);
我只在不使用 makefile 的情况下编译时收到相同函数的警告。
Debug.C: in function 'display_task_table':
Debug.c:627:3: warning: implicit declaration of function 'task_wait' [- Wimplicit-function-declaration]
task_wait(100*2);
我可以通过包含正确的头文件来修复错误,但我想知道为什么?
如果我需要添加任何其他内容,请告诉我
好吧,您在使用 Makefile 进行编译时使用了 .C
扩展名,因此编译器将该文件解释为 C++ 源文件,而在 C++ 中,没有原型是一个错误(并且只是一个警告在 C 中)只需重写行
$(Application_Source_Files_Objecs) : %.O: %.C
到
$(Application_Source_Files_Objecs) : %.o: %.c
再试一次(不要使用不区分大小写的操作系统 :) <--- 这是个玩笑,不要喷, 请)
编辑
请对指定 .C
和 .O
文件的所有行执行相同操作,也改为 .c
和 .o
。操作系统不关心字符的大小写,但 make(1)
和 gcc(1)
会。
我在使用 makefile 构建我的项目时遇到编译错误,而在使用控制台构建时我没有看到。
我正在为 PowerPC 使用预构建的 GNU 工具链。
这是我的 makefile,
GCC_Assembler = powerpc-eabi-as
GCC_Compiler = powerpc-eabi-gcc
Directory_Application :=$(argument)/Source_Files
Directory_Bootloader :=$(argument)/Source_Files
Directory_RAMBootloader :=$(argument)/Source_Files
Application_Source_Files := $(wildcard $(Directory_Application)/*.C)
Application_Source_Files_Objecs=$(Application_Source_Files:.C=.O)
default: Build_Application
all: Build_Application
Build_Application: $(Application_Source_Files_Objecs)
$(Application_Source_Files_Objecs) : %.O: %.C
$(GCC_Compiler) -c $< -o $@ -O1 -Wall -Wfatal-errors
当我尝试使用这些命令构建它时,它构建没有错误。
CD %WORKSPACE%\Source Files
powerpc-eabi-gcc debug.c -c -odebug.o -O1 -Wall -Wfatal-errors
powerpc-eabi-gcc io.c -c -oio.o -O1 -Wall -Wfatal-errors
...
...
所以,当使用 makefile 构建时,我收到一个函数未正确声明的错误。见下图
/Debug.C: infunction 'void display_task_table()':
/Debug.C:627:18: error: 'task_wait' was not declared in this scope
task_wait(100*2);
我只在不使用 makefile 的情况下编译时收到相同函数的警告。
Debug.C: in function 'display_task_table':
Debug.c:627:3: warning: implicit declaration of function 'task_wait' [- Wimplicit-function-declaration]
task_wait(100*2);
我可以通过包含正确的头文件来修复错误,但我想知道为什么?
如果我需要添加任何其他内容,请告诉我
好吧,您在使用 Makefile 进行编译时使用了 .C
扩展名,因此编译器将该文件解释为 C++ 源文件,而在 C++ 中,没有原型是一个错误(并且只是一个警告在 C 中)只需重写行
$(Application_Source_Files_Objecs) : %.O: %.C
到
$(Application_Source_Files_Objecs) : %.o: %.c
再试一次(不要使用不区分大小写的操作系统 :) <--- 这是个玩笑,不要喷, 请)
编辑
请对指定 .C
和 .O
文件的所有行执行相同操作,也改为 .c
和 .o
。操作系统不关心字符的大小写,但 make(1)
和 gcc(1)
会。