繁体   English   中英

Makefile不起作用

[英]Makefile is not working

我正在尝试使我的makefile工作,但它给了我一些错误,我无法使其工作。

 OBJS = Kmeans.o cluster.o data.o 
    CC = g++
    DEBUG = -g
    CFLAGS = -Wall -c $(DEBUG)
    LFLAGS = -Wall $(DEBUG)

    clustering : $(OBJS)
        $(CC) $(LFLAGS) $(OBJS) -o clustering

    Kmeans.o : Kmeans.h Kmeans.cpp cluster.h data.h
        $(CC) $(CFLAGS) Kmeans.cpp

cluster.o : cluster.h cluster.cpp data.h 
    $(CC) $(CFLAGS) cluster.cpp

data.o : data.h data.cpp 
    $(CC) $(CFLAGS) data.cpp

clean:
    \rm *.o *~ clustering

文件是:

clustering.cpp -> #include "Kmeans.h"
Kmeans.cpp     -> #include "Kmeans.h"
Kmeans.h       -> #include "cluster.h"
cluster.cpp    -> #include "cluster.h"
cluster.h      -> #include "data.h"
data.cpp       -> #include "data.h"

我究竟做错了什么?

编辑:对不起,我忘了包含以下错误:

Kmeans.o: In function `Kmeans::read(char*)':
Kmeans.cpp:(.text+0x53c): undefined reference to `Data::~Data()'
cluster.o: In function `Cluster::Cluster(int, int, int)':
cluster.cpp:(.text+0x45): undefined reference to `Data::~Data()'
cluster.cpp:(.text+0x80): undefined reference to `Data::~Data()'
cluster.o: In function `Cluster::Cluster()':
cluster.cpp:(.text+0xca): undefined reference to `Data::~Data()'
cluster.cpp:(.text+0x110): undefined reference to `Data::~Data()'
cluster.o: In function `Cluster::setData(int, int, int)':
cluster.cpp:(.text+0x158): undefined reference to `Data::~Data()'
collect2: ld devolvió el estado de salida 1
make: *** [clustering] Error 1

谢谢!

我编译每个文件,问题出在最后一行:

g++    -c -o clustering.o clustering.cpp
g++    -c -o data.o data.cpp
g++    -c -o Kmeans.o Kmeans.cpp
g++    -c -o cluster.o cluster.cpp
g++    -o clustering clustering.o data.o Kmeans.o cluster.o    <----

似乎您在data.hData::~Data data.h声明,并且在任何地方都没有定义。

只需从标头中删除声明或添加空定义即可,它是一个虚拟的析构函数。

该错误似乎不在您的makefile中,而是在您的CPP文件中。 尝试手动编译它,然后使用makefile使其自动化。

可能是您忘记了在data.cpp写入Data::~Data() data.cpp Data::~Data()data.cpp

示例MAKEFILE应该是这样的:

#list of pseudo variables here

executable: object1.o object2.o object3.o
         ld -r object1.o object2.o object3.o -o executable

object1.o : object1.cpp
         $(CC) object.cpp -o object1.o

object2.o : object2.cpp
         $(CC) object2.cpp -o object2.o

object3.o : object3.cpp
         $(CC) object3.cpp -o object3.o

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM