Xref: utzoo comp.lang.c:11501 comp.sys.ibm.pc:17450 Path: utzoo!attcan!uunet!husc6!think!ames!amdahl!pyramid!voder!kontron!optilink!cramer From: cramer@optilink.UUCP (Clayton Cramer) Newsgroups: comp.lang.c,comp.sys.ibm.pc Subject: Automatic Function Prototype Generation Message-ID: <306@optilink.UUCP> Date: 25 Jul 88 18:45:12 GMT Organization: Optilink Corporation, Petaluma, CA Lines: 46 Microsoft C has an option /Zg for automatic generation of function prototypes. The theory is that you do something like: cl /Zg foo.c >foo.e to generate a foo.e file to include in other modules that reference functions contained in foo.c. This works. The problem is make files. If you create a make file that automatically generates the .e files, it will force remakes of all the files dependent on foo.e -- even if remaking foo.e doesn't cause any change in foo.e except for the date and time stamp. My solution to this is a make file for generating the .e files that looks something like this: .c.e: cl -AL -c -Zg $*.c >$*.tmp updexh $*.tmp $*.e where "updexh" is a DOS batch file: if NOT EXIST %2 COPY %1 %2 cmp %1 %2 if ERRORLEVEL 1 goto changed goto done :changed COPY %1 %2 touch %2 :done seterr 0 where "cmp" is a small program that sets the errorlevel to 0 if the files exactly match, and to 1 if they don't exactly match. This works (clumsily), but there are two problems: 1. If you change a function definition in foo.c, and you have included foo.e in foo.c, you will get complaints that will prevent a compile from happening, and prevent a new foo.e from being produced. 2. If you are defining a new module, and no corresponding .e file exists, you have to have an empty .e file if any other modules are going to reference it. How are other people using the /Zg option? Clayton E. Cramer