C++ Debian的Makefile-main中的函数调用

C++ Debian的Makefile-main中的函数调用,c++,function,makefile,debian,C++,Function,Makefile,Debian,所以我有这个结构: simpleConnect.cpp(包含main) 调用功能_extract.cpp feature_extract.cpp(在这里做一些事情,返回simpleConnect) ISHEADER.h(具有特征提取声明和所有包含项等) 现在…这些文件使用了一个名为ARIA的库(用于mobilerobots)和一组头文件-EIGEN(用于矩阵操作等) 我曾经建议Aria的结构如下: SOURCES=simpleConnect all: $(SOURCES) CFLAGS=-fP

所以我有这个结构:

simpleConnect.cpp(包含main) 调用功能_extract.cpp

feature_extract.cpp(在这里做一些事情,返回simpleConnect)

ISHEADER.h(具有特征提取声明和所有包含项等)

现在…这些文件使用了一个名为ARIA的库(用于mobilerobots)和一组头文件-EIGEN(用于矩阵操作等)

我曾经建议Aria的结构如下:

SOURCES=simpleConnect
all: $(SOURCES)

CFLAGS=-fPIC -g -Wall
ARIA_INCLUDE =-I/usr/local/Aria/include
ARIA_LINK=-L/usr/local/Aria/lib -lAria -lpthread -ldl -lrt


%: %.cpp
        $(CXX) $(CFLAGS) $(ARIA_INCLUDE) $< -o $@ $(ARIA_LINK)
SOURCES=simpleConnect
全部:$(来源)
CFLAGS=-fPIC-g-Wall
ARIA_INCLUDE=-I/usr/local/ARIA/INCLUDE
ARIA_LINK=-L/usr/local/ARIA/lib-lAria-lpthread-ldl-lrt
%:%cpp
$(CXX)$(CFLAGS)$(ARIA_包括)$<-o$@$(ARIA_链接)
但是我在调用函数feature_extract的那一行得到了这个错误:

未定义对“特征提取(……)”的引用 collect2:ld重新连接1退出状态

据我所知,这是因为我没有告诉编译器功能提取在那里…因为我不知道如何

我尝试添加我在网上找到的作品,但没有效果,所以我来这里询问

任何人都可以修改makefile以便包含该文件以进行编译吗

谢谢你抽出时间, 帕特里克

  • 此应用程序需要“功能提取”。
  • 你在用“来源”来代替其他来源。
    如果这样做有效,就有可能进行进一步的改进。

    多亏了那些帮助我的人,我成功地解决了这个问题

    我最终阅读了GNU make手册,解决了我的问题

    这是最终工作的生成文件:

        CFLAGS=-fPIC -g -Wall
    ARIA_INCLUDE =-I/usr/local/Aria/include
    ARIA_LINK=-L/usr/local/Aria/lib -lAria -lpthread -ldl -lrt
    
    edit : simpleConnect.o feature_extract.o
            $(CXX) $(CFLAGS) $(ARIA_INCLUDE) -o edit simpleConnect.o
    feature_extract.o $(ARIA_LINK)
    
    simpleConnect.o : simpleConnect.cpp ThesisHeader.h feature_extract.cpp
            $(CXX) $(CFLAGS) $(ARIA_INCLUDE) -c simpleConnect.cpp $(ARIA_LINK)
    
    feature_extract.o : feature_extract.cpp ThesisHeader.h
            $(CXX) $(CFLAGS) $(ARIA_INCLUDE) -c feature_extract.cpp $(ARIA_LINK)
    
    clean :
            rm edit simpleConnect.o feature_extract.o
    

    ld
    是链接器,而不是编译器。
    SOURCES
    应该是
    SOURCES=simpleConnect.cpp feature\u extract.cpp
    如果我尝试:SOURCES=simpleConnect.cpp feature\u extract.cpp,我会出错“没有规则使目标为'all'所需的'feature_extract.cpp'。停止。您好,谢谢您的回复,但不幸的是,这也不起作用,返回了与以前相同的错误。我是否需要在其中的某个位置添加标题(seshader.h)?请原谅我,但我不知道如何做到这一点,我只是试图使用该文件进行编译,即它只是一个技术性的代码工作!谢谢again@user2220824:你能详细说明一下吗?我解决了这个问题,并发布了我自己问题的答案,谢谢你的帮助。
        CFLAGS=-fPIC -g -Wall
    ARIA_INCLUDE =-I/usr/local/Aria/include
    ARIA_LINK=-L/usr/local/Aria/lib -lAria -lpthread -ldl -lrt
    
    edit : simpleConnect.o feature_extract.o
            $(CXX) $(CFLAGS) $(ARIA_INCLUDE) -o edit simpleConnect.o
    feature_extract.o $(ARIA_LINK)
    
    simpleConnect.o : simpleConnect.cpp ThesisHeader.h feature_extract.cpp
            $(CXX) $(CFLAGS) $(ARIA_INCLUDE) -c simpleConnect.cpp $(ARIA_LINK)
    
    feature_extract.o : feature_extract.cpp ThesisHeader.h
            $(CXX) $(CFLAGS) $(ARIA_INCLUDE) -c feature_extract.cpp $(ARIA_LINK)
    
    clean :
            rm edit simpleConnect.o feature_extract.o