我有一个项目,它可以在unix下使用手工制作的基本makefile进行良好编译,但在windows下既不能使用netbeans也不能使用code::块。这显然会使项目极难调试。我试着用手工制作的makefile来代替自动生成的makefile,但我仍然得到下面的错误列表。
In file included from Graph.h:7:0,
from main.cpp:9:
List.h:37:6: error: expected unqualified-id before ‘delete’
List.h:40:16: error: variable or field ‘printList’ declared void
List.h:40:16: error: ‘FILE’ was not declared in this scope
List.h:40:22: error: ‘out’ was not declared in this scope
List.h:40:32: error: expected primary-expression before ‘L’
我制作的makefile是:
BASE_SOURCES = Graph.c List.c
BASE_OBJECTS = Graph.o List.o
HEADERS = Graph.h List.h
COMPILE = gcc -c -std=c99 -Wall
LINK = gcc -o
REMOVE = rm -f
MEMCHECK = valgrind --leak-check=full
GraphClient : GraphClient.o $(BASE_OBJECTS)
$(LINK) GraphClient GraphClient.o $(BASE_OBJECTS)
FindPath.o : FindPath.c $(HEADERS)
$(COMPILE) FindPath.c
GraphClient.o : GraphClient.c $(HEADERS)
$(COMPILE) GraphClient.c
$(BASE_OBJECTS) : $(BASE_SOURCES) $(HEADERS)
$(COMPILE) $(BASE_SOURCES)
clean :
$(REMOVE) GraphClient GraphClient.o $(BASE_OBJECTS)
checkClient : GraphClient
$(MEMCHECK) GraphClient
如果有人愿意,我可以包含netbeans生成的makefile,但我认为这并不重要,因为我的手工制作的makefile也不能在windows下工作。实际的代码也是如此,我认为这并不重要,因为它是在unix下编译的?
编译头文件时,gcc会报告语法错误。最可能的原因是Linux和Windows之间某个标准头文件的内容不同。List.h
第37行周围的代码是什么样子的?
还要注意,gcc抱怨第40行没有声明FILE
。这意味着stdio.h
在此之前已包含在Linux上的另一个头文件中,但未包含在Windows上。