table of contents next: global
Youtube: libcurl video tutorial: setup
setup a makefile that builds our code
Using Linux and gcc, we create a Makefile and a first C program embryo called mycurlapp.c.
When created, we can invoke
make to build our program
mycurlapp and we can
invoke it from the command line.
We can reuse this Makefile in several future episodes easily as we will keep
naming our source code
The Makefile uses the
curl-config tool, which typically gets installed with
curl. It is used to extract information about the curl build.
This is not really a make school but here’s how the basic stuff in the file works:
CC = `curl-config --cc`
This sets the
CC variable to hold the contents of what
outputs. That’s the name of the compiler that was used to build libcurl. Most
commonly this is plain
gcc. We could possibly make it
CC = gcc too.
LIBS = `curl-config --libs`
This sets the
LIBS variable to hold the contens of what
outputs. That’s a list of linker options necessary to link with libcurl on
this machine. Most commonly, this is
-lcurl. We could also probably get away
with simply doing
LIBS = -lcurl.
This is the first rule of the makefile and thus the “default” one that will be
checked for a plain
The output called
mycurlapp depends on the files on the right side of the
colon. There’s only one file there:
mycurlapp.o. If the
.o file is newer than
mycurlapp, then the following command will be executed:
$(CC) -g -o $@ $< $(LIBS)
The CC variable (that is the compiler) is used and a command line is created
with a few options like
$@ is an automatic variable that
holds the name from the left side of the colon in the line above (
$< holds the names on the ride side of the colon in the line above
$LIBS is often just
In a typical machine, the command line that runs is thus something like:
gcc -g -o mycurlapp mycurlapp.o -lcurl.
The object file depends on the C file. If the object file is missing or if the C file is newer than the object file, run the following command:
$(CC) -g -c $<
$< holds the names on the ride side of the colon in the line above,
which one is
mycurlapp.c which makes this run something like:
cc -g -c
-c flag to gcc makes it produce the object file from the C
clean: rm -f mycurlapp.o mycurlapp
Here’s a special target that lets us do
make clean and then this command
line is run. Handy when we want to wipe previous build results and start over,
The point in this episode is only that the code uses libcurl functions so we need to make sure the build succeeds. We don’t care very much what exactly the code does. Move on to simplest for that.