[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
how to advice please : rules with dependencies created in commands
From: |
PATTON, BILLY \(SBCSI\) |
Subject: |
how to advice please : rules with dependencies created in commands |
Date: |
Fri, 5 May 2006 07:26:41 -0500 |
Here's the problem described as simple as I can. The real version deals
with Oracle 8 and much more complex. But I think this simple version
will demonstrate the problem.
2 existing files : prog_1.c , prog_1.h
After compilation prog_1 create N files (.c,.h,.sql,...) based on input.
For this example it will be command line input. real world is parameter
file. My example only goes 2 level deep. My real world goes 4 levels
deep.
In a nutshell
target : prereq_1 prereq_2
(COMMAND) > prereq_2
So here's what I do now to create another .c and a .h file
gcc -o x prog_1.c
x prog_2
Now in the directory I have prog_2.c and prog_2.h
So now how do I arrange a makefile so that I have the dependencies
captured for prog_2.c
We have to prove in a demo that we can accomplish all dependencies.
Here's what I can conceive
__MAKEFILE_IS_BEST_GUESS__
# may be 1 to N values. represented here as var,
#but in real world is a parameters file passed to prog_1
INPUT_X : prog_2 prog_3 prog_4
.PHONY: all
all : x
#$(INPUT_X) does not exist until the commands for rule x fire
x : prog_1.c prog_1.h $(INPUT_X)
gcc -o $@ $<
for f in $(INPUT_X)
$@ $$f
done
#So how can rule x depend on prog_{2,3,4} until
#rule x has treated them
define xxx
$(1) : $(1).c $(1).h
gcc -o $@ $<
endef
$(foreach x,$(INPUT_X),$(eval $(call xxx,$(x))))
__END__
if I make the define dependent on x then that would, sort of, create a
circular dependency.
here is the c and .h source code I wrote for testing.
___C_CODE__
#include <stdio.h>
#include "prog_1.h"
long bogus = 0;
int main(int argc,char** argv)
{
char s[16];
FILE* fp;
sprintf(s,"%s.c",argv[1]);
fp = fopen(s,"w");
fprintf(fp,"#include <stdio.h>\n#include \"%s.h\"\nlong bogus =
0;\n",argv[1]);
fprintf(fp,"int main(int argc,char** argv)\n");
fprintf(fp,"{ printf(\"hello world from %%s\\n\",argv[0]); }\n");
close(fp);
sprintf(s,"%s.h",argv[1]);
fp = fopen(s,"w");
fprintf(fp,"#ifndef %s_h\n",argv[1]);
fprintf(fp,"#define %s_h\n",argv[1]);
fprintf(fp,"extern long bogus;\n");
fprintf(fp,"#endif\n");
close(fp);
}
__HEADER__
#ifndef prog_1_H
extern long bogus;
#define prog_1_H
#endif
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- how to advice please : rules with dependencies created in commands,
PATTON, BILLY \(SBCSI\) <=