c手工制作和自动生成的makefile在windows下失败,但在unix上可以工作



我有一个项目,它可以在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上。

相关内容

最新更新