Allegro.cc - Online Community

Allegro.cc Forums » Installation, Setup & Configuration » MinGW makefiles

This thread is locked; no one can reply to it. rss feed Print
MinGW makefiles
23yrold3yrold
Member #1,134
March 2001
avatar

Interesting one here; how do I go about including a .rc file in a makefile for compiling? Here's my newbie makefile:

1# Generic Makefile.
2TEMP = $(wildcard *.cpp)
3FILES = $(if $(TEMP), $(TEMP), $(error No source code found!))
4OBJS = $(addsuffix .o, $(basename $(FILES)))
5 
6# binary name
7BINARY = GameTest5.exe
8 
9# compiler flags
10FLAGS = -Wall -O2 -s -ffast-math -fomit-frame-pointer -funroll-loops
11 
12# main rule; compiles and links everything
13$(BINARY) : $(OBJS)
14 $(CXX) -o $(BINARY) $(OBJS) $(FLAGS) -lalleg -llua
15 
16$(OBJS) : *.h

So where and how does the resource file go ???

--
Software Development == Church Development
Step 1. Build it.
Step 2. Pray.

dudaskank
Member #561
July 2000
avatar

Well, never used resourcee files, but if you want to compile too, add it to the temp var...

But I'm level 0 in makefiles....

:P

Toque a balada do amor inabalável, eterna love song de nós dois
Eduardo "Dudaskank"
[ Home Page (ptbr) | Blog (ptbr) | Tetris 1.1 (ptbr) | Resta Um (ptbr) | MJpgAlleg 2.3 ]

ReyBrujo
Moderator
January 2001
avatar

It should look something like

myresource.o : myresource.rc
    windres [parameters] -o $< $^

Or something like that. Check Allegro makefile, which uses one in the demo example. I am at work, and don't have that, but it is like any other program.

--
RB
光子「あたしただ…奪う側に回ろうと思っただけよ」
Mitsuko's last words, Battle Royale

Peter Hull
Member #1,136
March 2001

If it were me, I'd

1# Generic Makefile.
2TEMP = $(wildcard *.cpp)
3FILES = $(if $(TEMP), $(TEMP), $(error No source code found!))
4OBJS = $(FILES:.cpp=.o)
5# or is it .o=.cpp I can never remember :(
6 
7# binary name
8BINARY = GameTest5.exe
9 
10#libs
11LDLIBS=-lalleg -llua
12 
13# compiler flags
14CXXFLAGS = -Wall -O2 -ffast-math -fomit-frame-pointer -funroll-loops
15LDFLAGS= -s
16 
17# main rule; compiles and links everything
18all: $(BINARY)
19 
20$(BINARY) : $(OBJS)
21 $(LINK.o) -o $(BINARY) $(OBJS) $(LDLIBS)
22 
23$(OBJS) : *.h

Evert
Member #794
November 2000
avatar

I have

   RESOURCE = obj/mingw/resource.o

...

   GOBJS += $(RESOURCE)

...

$(RESOURCE): src/resource.rc gfx/game.ico
        windres -O coff -o $@ -i $<

$(EXEF): $(GOBJS)
        $(CC) $(CFLAGS) $(LFLAGS) $(GOBJS) -o $@ $(LIBS)

You will probably want the windres line.

spellcaster
Member #1,493
September 2001
avatar

Speaking of mingW:
Why has the latest version renamed executables for make, gcc and g++?

--
There are no stupid questions, but there are a lot of inquisitive idiots.

Evert
Member #794
November 2000
avatar

Quote:

Why has the latest version renamed executables for make, gcc and g++?

They're no longer called make, gcc and g++?
What are they called now?

gillius
Member #119
April 2000

I don't know but I would like to know very much, because it has screwed up my GNE installer program on MingW2.

Edit: Evert: I know that make is now "make-mingw32.exe". I didn't think g++ had changed? But several of the items were renamed to append -mingw32 to their filenames.

Gillius
Gillius's Programming -- https://gillius.org/

Evert
Member #794
November 2000
avatar

That sucks. Badly.

It means all my makefiles are broken for newer versions of MinGW. Will the tools work if you rename them?

gillius
Member #119
April 2000

Yes. That's what I did personally, and what I've told all of my programming friends to do (well at first I told them to copy the file so that it has both names). It's really lame imho. It works perfectly fine to rename the stuff.

With this and the whole including windows.h with the standard header files and I'm extraordinarily dissapointed with the MingW 2.0 release. The GCC 3.2 compiler is awesome, but now I have to do 2 workarounds to compile Allegro code, because you have to define that lame _GTHREAD_HIDE_API or whatever symbol to get rid of the windows.h.

Gillius
Gillius's Programming -- https://gillius.org/

spellcaster
Member #1,493
September 2001
avatar

I simply copied the make file and renamed the copy.
But for some reason allegro doesn't compile anymore.. Guess I need to make a clean install of everything (ming, allegro, fblend)

--
There are no stupid questions, but there are a lot of inquisitive idiots.

Peter Hull
Member #1,136
March 2001

On a sensible OS you'd symlink make to make-mingw32 :-/
Pete

Thomas Fjellstrom
Member #476
June 2000
avatar

Quote:

Guess I need to make a clean install of everything (ming, allegro, fblend)

especially if you use C++. 3.1, 3.0 and 2.95.* all use a different method to munge variable names. (none are compatible)

--
Thomas Fjellstrom - [website] - [email] - [Allegro Wiki] - [Allegro TODO]
"If you can't think of a better solution, don't try to make a better solution." -- weapon_S
"The less evidence we have for what we believe is certain, the more violently we defend beliefs against those who don't agree" -- https://twitter.com/neiltyson/status/592870205409353730

23yrold3yrold
Member #1,134
March 2001
avatar

Okay, I'm taking another stab at this. Makefile syntax has always eluded me, so this is really frustrating >:( What have I done wrong here? I get "Makefile:7: *** missing seperator. Stop." Dunno what a seperator is though ....

1# Generic Makefile.
2SRCS = $(wildcard *.cpp)
3FILES = $(if $(SRCS), $(SRCS), $(error No source code found!))
4OBJS = $(addsuffix .o, $(basename $(FILES)))
5 
6Rsrc.o : rsrc.rc
7 windres -O coff -o $< $^
8 
9# binary name
10BINARY = AllegroPaintviamakefile.exe
11 
12# compiler flags
13FLAGS = -Wall -O2 -s -ffast-math -fomit-frame-pointer -funroll-loops -mwindows -O1 -fexpensive-optimizations
14 
15# main rule; compiles and links everything
16$(BINARY) : $(OBJS)
17 $(CXX) -o $(BINARY) $(OBJS) $(FLAGS) -lalleg -llua
18 
19 
20# lets the makefile know what headers the objects require.
21# If one changes, everything that includes it recompiles.
22# Here, if any header changes, everything is recompiled
23$(OBJS) : *.h

--
Software Development == Church Development
Step 1. Build it.
Step 2. Pray.

Matthew Leverton
Supreme Loser
January 1999
avatar

Make sure it's a [TAB]:

Rsrc.o: rsrc.rc
[TAB]windres -O coff -o $< $^

23yrold3yrold
Member #1,134
March 2001
avatar

Whoops. Thanks.

I had some more fubarness but I think I got it now ...

1# Generic Makefile.
2SRCS = $(wildcard *.cpp)
3FILES = $(if $(SRCS), $(SRCS), $(error No source code found!))
4OBJS = $(addsuffix .o, $(basename $(FILES)))
5 
6# binary name
7BINARY = AllegroPaint.exe
8 
9# compiler flags
10FLAGS = -Wall -O2 -s -ffast-math -fomit-frame-pointer -funroll-loops -mwindows -O1 -fexpensive-optimizations
11 
12# main rule; compiles and links everything
13$(BINARY) : $(OBJS) Rsrc.o
14 $(CXX) -o $(BINARY) $(OBJS) $(FLAGS) -lalleg -llua
15 
16Rsrc.o : rsrc.rc
17 windres -O coff -o $< $^
18 
19# lets the makefile know what headers the objects require.
20# If one changes, everything that includes it recompiles.
21# Here, if any header changes, everything is recompiled
22$(OBJS) : *.h

Seems to work :) I have no idea what "$< $^" is supposed to mean though ....

EDIT: Scratch that ....

windres -O coff -o rsrc.rc rsrc.rc
windres: rsrc.rc:1: parse error
\DEV-CPP\BIN\..\lib\gcc-lib\mingw32\2.95.3-6\cpp0.exe: stdout: Broken pipe
C:\DEV-CPP\BIN\MAKE.EXE: *** [Rsrc.o] Error 1

--
Software Development == Church Development
Step 1. Build it.
Step 2. Pray.

Thomas Fjellstrom
Member #476
June 2000
avatar

Your rc file is fubar'ed.

Quote:

windres: rsrc.rc:1: parse error

Quote:

I have no idea what "$< $^" is supposed to mean though

That you could find by RTFMing ;) The make manual is fairly logical. Check google for an online one.

--
Thomas Fjellstrom - [website] - [email] - [Allegro Wiki] - [Allegro TODO]
"If you can't think of a better solution, don't try to make a better solution." -- weapon_S
"The less evidence we have for what we believe is certain, the more violently we defend beliefs against those who don't agree" -- https://twitter.com/neiltyson/status/592870205409353730

23yrold3yrold
Member #1,134
March 2001
avatar

I have looked through it; it breaks my brain. And my .rc file should be just peachy; Dev-C++ compiles it fine ...

EDIT: DAMMIT!!! >:( >:( >:( >:( >:( >:(

Running that makefile totally ruined my resource file!!! Now I have to rewrite the whole bloody thing ....

--
Software Development == Church Development
Step 1. Build it.
Step 2. Pray.

Thomas Fjellstrom
Member #476
June 2000
avatar

I think you need to set the type of the input and output files... heres the line that I use...

windres -F pe-i386 -I rc -O COFF -i input.rc -o output.o

If you need to know what any of that means:

C:\blah>windres --help

--
Thomas Fjellstrom - [website] - [email] - [Allegro Wiki] - [Allegro TODO]
"If you can't think of a better solution, don't try to make a better solution." -- weapon_S
"The less evidence we have for what we believe is certain, the more violently we defend beliefs against those who don't agree" -- https://twitter.com/neiltyson/status/592870205409353730

23yrold3yrold
Member #1,134
March 2001
avatar

Well, I had copied my dialog scripts into my dialog-making notes, so that wasn't too much work (whew). Anyway, "windres --help" = "crapload of text that whizzes by and I can't read it". Maybe I'll go dig up the make docs and see if I can't figure out a little more. See if I can decipher your little line there .....

--
Software Development == Church Development
Step 1. Build it.
Step 2. Pray.

Thomas Fjellstrom
Member #476
June 2000
avatar

um... 23.. You just redirect all that to a file, or get 'less'. Then do: 'windres --help | less'. Then less will 'page' the program, and let you scoll the text up and down.

--
Thomas Fjellstrom - [website] - [email] - [Allegro Wiki] - [Allegro TODO]
"If you can't think of a better solution, don't try to make a better solution." -- weapon_S
"The less evidence we have for what we believe is certain, the more violently we defend beliefs against those who don't agree" -- https://twitter.com/neiltyson/status/592870205409353730

23yrold3yrold
Member #1,134
March 2001
avatar

I used your line, slightly modified:

rsrc.o : rsrc.rc
      windres -F pe-i386 -I rc -O COFF -i rsrc.rc -o rsrc.o

It compiles, but all the resources are missing in the program. No dialogs, no menus, no cursors, etc. I'm reading the make docs now, but my main curiosity is what's supposed to "compile" the resource file. It's not exactly standard C/C++ ...

I tried this line too; same result:

  windres --use-temp-file -I rc -O coff -i rsrc.rc -o rsrc.o

Just trying random stuff until I find the info in the docs ...

--
Software Development == Church Development
Step 1. Build it.
Step 2. Pray.

Thomas Fjellstrom
Member #476
June 2000
avatar

I know it works for me :) How are you using the resources?

--
Thomas Fjellstrom - [website] - [email] - [Allegro Wiki] - [Allegro TODO]
"If you can't think of a better solution, don't try to make a better solution." -- weapon_S
"The less evidence we have for what we believe is certain, the more violently we defend beliefs against those who don't agree" -- https://twitter.com/neiltyson/status/592870205409353730

23yrold3yrold
Member #1,134
March 2001
avatar

Reply 23 ....

Never mind; I got it. Look at the complete makefile I posted up there; I put rsrc.o in the prerequisites, but I didn't actually link it in the command. Here's my final effort:

1SRCS = $(wildcard *.cpp)
2FILES = $(if $(SRCS), $(SRCS), $(error No source code found!))
3OBJS = $(addsuffix .o, $(basename $(FILES)))
4 
5# binary name
6BINARY = BOLA.exe
7 
8# compiler flags
9FLAGS = -Wall -O2 -s -ffast-math -fomit-frame-pointer -funroll-loops -mwindows
10 
11# main rule; compiles and links everything
12$(BINARY) : $(OBJS) rsrc.o
13 $(CXX) -o $(BINARY) $(OBJS) rsrc.o $(FLAGS) -lalleg
14 
15rsrc.o : rsrc.rc
16 windres rsrc.rc -o rsrc.o
17 
18# lets the makefile know what headers the objects require.
19# If one changes, everything that includes it recompiles.
20# Here, if any header changes, everything is recompiled
21$(OBJS) : *.h

By jove, I think I've got it ....

--
Software Development == Church Development
Step 1. Build it.
Step 2. Pray.

Go to: