C++ 在Makefile中链接cURL

C++ 在Makefile中链接cURL,c++,curl,linker,makefile,C++,Curl,Linker,Makefile,我需要在Ubuntu11.04中的链接cURL后安装cURL的源代码 问题的纠正 首先我发现-l必须在-l之前,然后发现我没有在makefile中输入变量。 获取卷曲配置: 在我的任期内: # curl-config --libs -L/usr/local/lib -lcurl # curl-config --cflags -I/usr/local/include 没关系,这个目录里有文件 我的生成文件: 我的C++源代码: 我知道这是找不到库的错误,但对我来说一切都是正确的下面路

我需要在Ubuntu11.04中的链接cURL后安装cURL的源代码

问题的纠正 首先我发现-l必须在-l之前,然后发现我没有在makefile中输入变量。

获取卷曲配置: 在我的任期内:

# curl-config --libs
-L/usr/local/lib -lcurl

# curl-config --cflags
-I/usr/local/include
没关系,这个目录里有文件


我的生成文件:
我的C++源代码:

我知道这是找不到库的错误,但对我来说一切都是正确的

下面路径的开头缺少斜杠

-I/usr/local/include
-L/usr/local/lib

这应该可以完成任务。你以前没有真正链接到cURL

build: $(SOURCES)
    $(CXX) -o $(OUT) $(INCLUDE) $(CFLAGS) $(LDFLAGS) $(LDLIBS) $(SOURCES)
注意添加的
$(LDLIBS)

哦,我应该补充一点,基本上发生的事情是,你抛弃了GNU make的内置规则(参见
make-np
)并定义了你自己的规则。我建议,如果您希望依赖各自的变量来控制构建,您可以使用内置变量,或者为了简洁起见,您仍然可以将其拆分为编译和链接步骤

简要说明:GNU make附带一条规则,说明如何从
.cpp
(或
.c
)文件生成
.o
文件。因此,您的make文件可能会被重写为(大约)


这将生成名为
test
(OUT的内容)的二进制文件,否则将使用内置规则。通过使用
.o
文件推断必须存在源文件,将查找并编译它们。因此,隐式地,此构建将为每个
.cpp
文件运行一个调用,并为链接步骤运行一个调用。

为什么说查找库时出错?您甚至没有传递
-lcurl
(或链接器的适当值)。这不是问题吗?目前,链接器不会尝试根据命令行查找库……我在没有它们的情况下运行,但最好放它们。@Bruno:如果这是一条绝对路径,那么是的,这是绝对必要的。否则,如果libs和includes的路径是相对于
$(CURDIR)
的,则可以。
# make
g++ -o test -Iusr/local/include -Wall -Werror -Lusr/local/lib  src/main.cpp 
/tmp/ccli90i2.o: In function `main':
main.cpp:(.text+0xa): undefined reference to `curl_easy_init'
main.cpp:(.text+0x31): undefined reference to `curl_easy_setopt'
main.cpp:(.text+0x3d): undefined reference to `curl_easy_perform'
main.cpp:(.text+0x4d): undefined reference to `curl_easy_cleanup'
collect2: ld returned 1 exit status
make: ** [build] Erro 1
-I/usr/local/include
-L/usr/local/lib
build: $(SOURCES)
    $(CXX) -o $(OUT) $(INCLUDE) $(CFLAGS) $(LDFLAGS) $(LDLIBS) $(SOURCES)
# Testing cURL
# MAKEFILE

# C++ Compiler (Default: g++)
CXX = g++
CFLAGS = -Wall -Werror

# Librarys
INCLUDE = -I/usr/local/include
LDFLAGS = -L/usr/local/lib 
LDLIBS = -lcurl

# Details
SOURCES = src/main.cpp
OUT = test

.PHONY: all

all: build

$(OUT): $(patsubst %.cpp,%.o,$(SOURCES))