I’m working on one of my first projects that will span more than one C file. For my first couple practice programs, I just wrote my code in main.c and compiled using gcc main.c -o main. This worked for me as I was learning.
Now, I’m working on a much bigger project on my own. I want to continue doing compilation on my own (or at least setting it up manually) so I can understand the process. After reading a bit, I decided to make a Makefile.
Note: I’m also using GTK+, so I had to look up how to add that into the compile command.
This is what it looks like after a bit of research:
main:
gcc -Wall -g main.c -o main `pkg-config --cflags --libs gtk+-2.0`
At first, I was just running “make”. Then I was having some problems getting the error “main is up to date” even though I had changed the file.
So I wrote a script:
#!/bin/bash
rm main
make
./main
So I make changes, and then I run this script.
Is this a good/normal system? I want to have scalable system, since my project will grow. I assume I can keep that script and just add dependencies to the makefile and change the main compile command in the makefile. Am I correct?
Thanks in advance.
EDIT:
Thanks for the feedback about how to fix my Makefile.
So is the typical compilation process 1) type make then 2) ./main regardless of how the project is setup or its size (assuming you’ve written a proper makefile)?
You need to tell make that
maindepends onmain.c. That way every time you make changes tomain.cand then runmake,mainis regenerated. To deletemainyou can have a phony target calledcleanas:Now to delete
mainyou can do :make cleanIf you get
make: main is up to date.It means you’ve not modifiedmain.cand hence there is not need for regeneratingmain. But if you have to force regeneratingmaineven when the dependencies have not been updated you can also use the-Boption ofmakeas suggested by Sjoerd in other answer.