Debian的Makefile - main中的函数调用

时间:2013-03-28 17:33:19

标签: c++ function makefile debian

所以我有这个结构:

simpleConnect.cpp(包含main)       调用feature_extract.cpp

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

ThesisHeader.h(声明了feature_extract和所有包含等...)

现在......这些文件使用名为ARIA的库(用于移动机器人)和一组头文件 - 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)

但是我在调​​用函数feature_extract:

的行中收到此错误

对'feature_extract(......)'的未定义引用 collect2:ld重新出现1退出状态

据我所知,这与我没有告诉编译器feature_extract有...因为我不知道如何......

我尝试添加我在网上找到的作品,但无济于事,因此我来这里问。

是否有人能够修改makefile以便包含该文件以便能够编译?

感谢您的时间, 帕特里克

2 个答案:

答案 0 :(得分:0)

  1. 此应用需要`feature_extract`。
  2. 您使用“SOURCES”来获取除源之外的其他内容。
CFLAGS=-fPIC -g -Wall
ARIA_INCLUDE =-I/usr/local/Aria/include
ARIA_LINK=-L/usr/local/Aria/lib -lAria -lpthread -ldl -lrt

app_name: simpleConnect.cpp feature_extract.cpp
    $(CXX) $(CFLAGS) $(ARIA_INCLUDE) $^ -o $@ $(ARIA_LINK)

如果有效,可以进一步改进。

答案 1 :(得分:0)

感谢那些帮助过的人,我设法解决了这个问题。

我最后阅读了GNU make手册,它解决了我的问题。

https://www.gnu.org/software/make/manual/make.pdf

这是最终生效的最终makefile:

    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