From: Gerard v. d. B. <gva...@gm...> - 2011-10-22 10:17:34
|
Hello, I have a question regarding a Makefile that holds multiple targets and has to compile specific code using a compile time define. For example the following Makefile: libs = file1.rel file2.rel file3.rel srcs = $(libs,.rel=.c) %.rel : %.c $(CC) $(CFLAGS) -c $< all: target1.hex target2: target2.hex target3: target3.hex target1.hex: application.c $(libs) sdcc $(CFLAGS) $(LFLAGS) application.c $(libs) -DTARGET1 packihx <application.ihx >bins/application.hex target2.hex: application.c $(libs) sdcc $(CFLAGS) $(LFLAGS) application.c $(libs) -DTARGET2 packihx <application.ihx >bins/application.hex target3.hex: application.c $(libs) sdcc $(CFLAGS) $(LFLAGS) application.c $(libs) -DTARGET3 packihx <application.ihx >bins/application.hex If I understand correct, before application.c is compiled for a target, the libs are already compiled. But actually I want that the define is also passed at compile time to the lib files (file1,file2 and file3). Can anyone point me to an example of a Makefile for SDCC with such a construction or a hint on how this can be solved? Regards, Gerard |
From: Bodo W. <bod...@we...> - 2011-10-22 16:09:40
|
Hi Gerard, > But actually I want that the define is also passed at compile time to > the lib files (file1,file2 and file3). Because of obvious reasons. ;-) > Can anyone point me to an example of a Makefile for SDCC with such a > construction or a hint on how this can be solved? In my Makefiles I always use different names for the compiled libraries. The source is shared, though. The advantage is that the libraries don't have to be recompiled if another target is built. HTH, Bodo |
From: Gerard v. d. B. <gva...@gm...> - 2011-10-23 13:10:13
|
Hi Bodo, > But actually I want that the define is also passed at compile time to > > the lib files (file1,file2 and file3). > Because of obvious reasons. ;-) > > > Can anyone point me to an example of a Makefile for SDCC with such a > > construction or a hint on how this can be solved? > In my Makefiles I always use different names for the compiled libraries. > The source is shared, though. The advantage is that the libraries don't > have to be recompiled if another target is built. > If I understand correctly for each target a library variable has to be created, each target then links to its own library and those libary files are on forehand compiled with the appropriate target variable? Regards, Gerard |
From: Bodo W. <bod...@we...> - 2011-10-23 19:25:41
|
Hi Gerard, Right, something like this (I left out packihx): libs = file1 file2 file3 all: target1.hex target2.hex target3.hex $(libs:%=%_target1.rel) : %_target1.rel : %.c $(CC) $(CFLAGS) -c -DTARGET1 $< -o $@ $(libs:%=%_target2.rel) : %_target2.rel : %.c $(CC) $(CFLAGS) -c -DTARGET2 $< -o $@ $(libs:%=%_target3.rel) : %_target3.rel : %.c $(CC) $(CFLAGS) -c -DTARGET3 $< -o $@ target1.hex: application.c $(libs:%=%_target1.rel) $(CC) $(CFLAGS) $(LFLAGS) application.c $(libs:%=%_target1.rel) -DTARGET1 -o $@ target2.hex: application.c $(libs:%=%_target2.rel) $(CC) $(CFLAGS) $(LFLAGS) application.c $(libs:%=%_target2.rel) -DTARGET2 -o $@ target3.hex: application.c $(libs:%=%_target3.rel) $(CC) $(CFLAGS) $(LFLAGS) application.c $(libs:%=%_target3.rel) -DTARGET3 -o $@ With $(foreach ...) and $(eval ...) you could automate a lot more, but you'll need GNU Make in version 3.81 at least. ;-) Try to find a tutorial for make. And oh, there is a cool command line option "-n" for make, just to test-run your Makefile. Good luck! Bodo |
From: Jan W. <we...@ef...> - 2011-10-23 19:33:49
|
What I would perhaps do, rather than juggle with the names, I'd place the binaries for every target into a separate subdirectory. Jan ----- Original Message --------------- >Hi Gerard, > >Right, something like this (I left out packihx): > > >libs = file1 file2 file3 > >all: target1.hex target2.hex target3.hex > >$(libs:%=%_target1.rel) : %_target1.rel : %.c > $(CC) $(CFLAGS) -c -DTARGET1 $< -o $@ > >$(libs:%=%_target2.rel) : %_target2.rel : %.c > $(CC) $(CFLAGS) -c -DTARGET2 $< -o $@ > >$(libs:%=%_target3.rel) : %_target3.rel : %.c > $(CC) $(CFLAGS) -c -DTARGET3 $< -o $@ > >target1.hex: application.c $(libs:%=%_target1.rel) > $(CC) $(CFLAGS) $(LFLAGS) application.c $(libs:%=%_target1.rel) -DTARGET1 -o $@ > >target2.hex: application.c $(libs:%=%_target2.rel) > $(CC) $(CFLAGS) $(LFLAGS) application.c $(libs:%=%_target2.rel) -DTARGET2 -o $@ > >target3.hex: application.c $(libs:%=%_target3.rel) > $(CC) $(CFLAGS) $(LFLAGS) application.c $(libs:%=%_target3.rel) -DTARGET3 -o $@ > |
From: Gerard v. d. B. <gva...@gm...> - 2011-10-24 16:50:38
|
Thank you all for the solutions, I can get it working now :). Regards, Gerard On Sun, Oct 23, 2011 at 9:37 PM, Jan Waclawek <we...@ef...> wrote: > What I would perhaps do, rather than juggle with the names, I'd place the > binaries for every target into a separate subdirectory. > > Jan > > ----- Original Message --------------- > >Hi Gerard, > > > >Right, something like this (I left out packihx): > > > > > >libs = file1 file2 file3 > > > >all: target1.hex target2.hex target3.hex > > > >$(libs:%=%_target1.rel) : %_target1.rel : %.c > > $(CC) $(CFLAGS) -c -DTARGET1 $< -o $@ > > > >$(libs:%=%_target2.rel) : %_target2.rel : %.c > > $(CC) $(CFLAGS) -c -DTARGET2 $< -o $@ > > > >$(libs:%=%_target3.rel) : %_target3.rel : %.c > > $(CC) $(CFLAGS) -c -DTARGET3 $< -o $@ > > > >target1.hex: application.c $(libs:%=%_target1.rel) > > $(CC) $(CFLAGS) $(LFLAGS) application.c $(libs:%=%_target1.rel) > -DTARGET1 -o $@ > > > >target2.hex: application.c $(libs:%=%_target2.rel) > > $(CC) $(CFLAGS) $(LFLAGS) application.c $(libs:%=%_target2.rel) > -DTARGET2 -o $@ > > > >target3.hex: application.c $(libs:%=%_target3.rel) > > $(CC) $(CFLAGS) $(LFLAGS) application.c $(libs:%=%_target3.rel) > -DTARGET3 -o $@ > > > > > > ------------------------------------------------------------------------------ > The demand for IT networking professionals continues to grow, and the > demand for specialized networking skills is growing even more rapidly. > Take a complimentary Learning@Cisco Self-Assessment and learn > about Cisco certifications, training, and career opportunities. > http://p.sf.net/sfu/cisco-dev2dev > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > |