简体   繁体   中英

How to compile with headers and a create a Makefile - C

I am trying to compile and create a Makefile with my source code organized as per the following structure:

|-- build
|-- include
| \-- functions.h
\-- src
|-- functions.c
\-- main.c

The code written there has been tested on an IDE, so I know it works. I just need to compile it but I don't know how to execute 2 files with extensions .c and the .h file. ALSO, I need to create a makefile for this.

How?

A Makefile is just some textual file (where tab characters are significant at least when they start a command line). Use some source code editor to create or improve it; I prefer GNU emacs so recommend it, but you could use some other editor (eg vim , gedit , etc...), it is a matter of taste. BTW, don't forget to use some version control system (I recommend git ).

Before creating your Makefile take some time to read the documentation of make . Be aware of the numerous built-in rules (which you could obtain by running make -p ) and take advantage of them.

how to execute 2 .c files and the .h file.

You don't execute .c files, but you feed them to your C compiler . I recommend using GCC (or perhaps Clang/LLVM ) as your C compiler.

You probably should set the CC make variable (it gives the default C compiler) to gcc , and the CFLAGS variable (it gives default compiler flags).

So read documentation about Invoking GCC . You surely want to compile with all warnings and debug info.

Hence, I recommend to have the following two lines in your Makefile

 CC= gcc
 CFLAGS= -Wall -Wextra -g

Of course, you need other lines in your Makefile . I leave you to read more and experiment. This and that should be inspirational.

You probably want to mention the dependency on your header file(s) in your Makefile .

So I leave you to write your Makefile . Consider it as source code , so backup and version control it carefully.

BTW, for a tiny program like yours, I don't think that having src/ and include/ directories is useful, and I believe that introducing a build/ directory is just adding unnecessary complexity. YMMV.

The code written there has been tested on a IDE, so I know it works.

This could be an illusion. Sometimes you can have the bad luck of having some undefined behavior which simply "appears" to work but is a bug. See this answer and follow the links I gave there.

There are many free software projects built with make ; look on github and elsewhere to find some. Sometimes Makefile s are themselves generated (eg using cmake , qmake , or autoconf ), but that is not worthwhile in your simple case.

PS. Don't expect StackOverflow to do your homework.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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