Version:
--------
GNU Make version 3.78.1, by Richard Stallman and Roland McGrath.
Built for sparc-sun-solaris2.8
Situation:
---------
Files such as scripts are in two directories, one which is used
for development and testing, and another which end users have in
their paths. There is a makefile with an implicit rule for updating
files, i.e. copying them from the development directory to the
production directory. The implicit rule is apparently not being
interpreted as I would expect for files in subdirectories.
Sample directory structure:
--------------------------
/
|
parent_dir
|
----------------------
| |
prod_dir--file1 dev_dir--file1
file2 file2
fil33 file3
subdir1--file4 subdir1--file4
file5 file5
file6 file6
Makefile
Sample Makefile contents:
------------------------
%:$(DEV_DIR)/%
cp -p $(DEV_DIR)/$@ $@
main: group1 group2
group1: file1 file2 file3
group2: ./subdir1/file4 ./subdir1/file5 ./subdir1/file6
How make is invoked:
-------------------
cd parent_dir/prod_dir
gmake -r -f Makefile DEV_DIR=/parent_dir/dev_dir
What should happen:
------------------
file1, file2, and file3 should be copied from dev_dir to prod_dir
if there are newer versions in dev_dir, and the same for files in
the respective subdirectories.
Applying the implicit rule for file1 we should have:
file1: /parent_dir/dev_dir/file1
cp -p /parent_dir/dev_dir/$@ $@
Applying the implicit rule for ./subdir1/file4 we should have:
./subdir1/file4: /parent_dir/dev_dir/./subdir1/file4
cp -r -p /parent_dir/dev_dir/$@ $@
What does happen:
----------------
Newer files in /parent/dev_dir get copied, but newer ones in
the subdirectory subdir1 do not.
So it looks like the % in the implicit rule only works when
it represents a simple file name, not when it represents a
relative or absolute path.
Attached is the debug output from gmake for the sample above.
Notice that for file2 an implicit rule is found, but not for
./subdir1/file4.
Scott Pedigo
Oerlikon-Contraves AG
Birchstrasse 155
CH-8050 Switzerland
E-mail: [EMAIL PROTECTED]
GNU Make version 3.78.1, by Richard Stallman and Roland McGrath.
Built for sparc-sun-solaris2.8
Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Report bugs to <[EMAIL PROTECTED]>.
Reading makefiles...
Reading makefile `Makefile'...
Updating makefiles....
Considering target file `Makefile'.
Looking for an implicit rule for `Makefile'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `/home/eaa/czped/test_make/dev_dir/Makefile'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `/home/eaa/czped/test_make/dev_dir/Makefile'.
Looking for a rule with intermediate file
`/home/eaa/czped/test_make/dev_dir/Makefile'.
Avoiding implicit rule recursion.
No implicit rule found for `Makefile'.
Finished prerequisites of target file `Makefile'.
No need to remake target `Makefile'.
Updating goal targets....
Considering target file `main'.
File `main' does not exist.
Looking for an implicit rule for `main'.
Trying pattern rule with stem `main'.
Trying implicit prerequisite `/home/eaa/czped/test_make/dev_dir/main'.
Trying pattern rule with stem `main'.
Trying implicit prerequisite `/home/eaa/czped/test_make/dev_dir/main'.
Looking for a rule with intermediate file `/home/eaa/czped/test_make/dev_dir/main'.
Avoiding implicit rule recursion.
No implicit rule found for `main'.
Considering target file `group1'.
File `group1' does not exist.
Looking for an implicit rule for `group1'.
Trying pattern rule with stem `group1'.
Trying implicit prerequisite `/home/eaa/czped/test_make/dev_dir/group1'.
Trying pattern rule with stem `group1'.
Trying implicit prerequisite `/home/eaa/czped/test_make/dev_dir/group1'.
Looking for a rule with intermediate file
`/home/eaa/czped/test_make/dev_dir/group1'.
Avoiding implicit rule recursion.
No implicit rule found for `group1'.
Considering target file `file1'.
Looking for an implicit rule for `file1'.
Trying pattern rule with stem `file1'.
Trying implicit prerequisite `/home/eaa/czped/test_make/dev_dir/file1'.
Found an implicit rule for `file1'.
Considering target file `/home/eaa/czped/test_make/dev_dir/file1'.
Looking for an implicit rule for `/home/eaa/czped/test_make/dev_dir/file1'.
Trying pattern rule with stem `file1'.
Trying implicit prerequisite
`/home/eaa/czped/test_make/dev_dir//home/eaa/czped/test_make/dev_dir/file1'.
Trying pattern rule with stem `file1'.
Trying implicit prerequisite
`/home/eaa/czped/test_make/dev_dir//home/eaa/czped/test_make/dev_dir/file1'.
Looking for a rule with intermediate file
`/home/eaa/czped/test_make/dev_dir//home/eaa/czped/test_make/dev_dir/file1'.
Avoiding implicit rule recursion.
No implicit rule found for `/home/eaa/czped/test_make/dev_dir/file1'.
Finished prerequisites of target file `/home/eaa/czped/test_make/dev_dir/file1'.
No need to remake target `/home/eaa/czped/test_make/dev_dir/file1'.
Finished prerequisites of target file `file1'.
Prerequisite `/home/eaa/czped/test_make/dev_dir/file1' is newer than target
`file1'.
Must remake target `file1'.
cp -p /home/eaa/czped/test_make/dev_dir/file1 file1
Putting child 0x0004ab00 (file1) PID 11894 on the chain.
Live child 0x0004ab00 (file1) PID 11894
Got a SIGCHLD; 1 unreaped children.
Reaping winning child 0x0004ab00 PID 11894
Removing child 0x0004ab00 PID 11894 from chain.
Successfully remade target file `file1'.
Considering target file `file2'.
Looking for an implicit rule for `file2'.
Trying pattern rule with stem `file2'.
Trying implicit prerequisite `/home/eaa/czped/test_make/dev_dir/file2'.
Found an implicit rule for `file2'.
Considering target file `/home/eaa/czped/test_make/dev_dir/file2'.
Looking for an implicit rule for `/home/eaa/czped/test_make/dev_dir/file2'.
Trying pattern rule with stem `file2'.
Trying implicit prerequisite
`/home/eaa/czped/test_make/dev_dir//home/eaa/czped/test_make/dev_dir/file2'.
Trying pattern rule with stem `file2'.
Trying implicit prerequisite
`/home/eaa/czped/test_make/dev_dir//home/eaa/czped/test_make/dev_dir/file2'.
Looking for a rule with intermediate file
`/home/eaa/czped/test_make/dev_dir//home/eaa/czped/test_make/dev_dir/file2'.
Avoiding implicit rule recursion.
No implicit rule found for `/home/eaa/czped/test_make/dev_dir/file2'.
Finished prerequisites of target file `/home/eaa/czped/test_make/dev_dir/file2'.
No need to remake target `/home/eaa/czped/test_make/dev_dir/file2'.
Finished prerequisites of target file `file2'.
Prerequisite `/home/eaa/czped/test_make/dev_dir/file2' is newer than target
`file2'.
Must remake target `file2'.
cp -p /home/eaa/czped/test_make/dev_dir/file2 file2
Putting child 0x0004ac00 (file2) PID 11895 on the chain.
Live child 0x0004ac00 (file2) PID 11895
Got a SIGCHLD; 1 unreaped children.
Reaping winning child 0x0004ac00 PID 11895
Removing child 0x0004ac00 PID 11895 from chain.
Successfully remade target file `file2'.
Considering target file `file3'.
Looking for an implicit rule for `file3'.
Trying pattern rule with stem `file3'.
Trying implicit prerequisite `/home/eaa/czped/test_make/dev_dir/file3'.
Found an implicit rule for `file3'.
Considering target file `/home/eaa/czped/test_make/dev_dir/file3'.
Looking for an implicit rule for `/home/eaa/czped/test_make/dev_dir/file3'.
Trying pattern rule with stem `file3'.
Trying implicit prerequisite
`/home/eaa/czped/test_make/dev_dir//home/eaa/czped/test_make/dev_dir/file3'.
Trying pattern rule with stem `file3'.
Trying implicit prerequisite
`/home/eaa/czped/test_make/dev_dir//home/eaa/czped/test_make/dev_dir/file3'.
Looking for a rule with intermediate file
`/home/eaa/czped/test_make/dev_dir//home/eaa/czped/test_make/dev_dir/file3'.
Avoiding implicit rule recursion.
No implicit rule found for `/home/eaa/czped/test_make/dev_dir/file3'.
Finished prerequisites of target file `/home/eaa/czped/test_make/dev_dir/file3'.
No need to remake target `/home/eaa/czped/test_make/dev_dir/file3'.
Finished prerequisites of target file `file3'.
Prerequisite `/home/eaa/czped/test_make/dev_dir/file3' is newer than target
`file3'.
Must remake target `file3'.
cp -p /home/eaa/czped/test_make/dev_dir/file3 file3
Putting child 0x0004b1c8 (file3) PID 11896 on the chain.
Live child 0x0004b1c8 (file3) PID 11896
Got a SIGCHLD; 1 unreaped children.
Reaping winning child 0x0004b1c8 PID 11896
Removing child 0x0004b1c8 PID 11896 from chain.
Successfully remade target file `file3'.
Finished prerequisites of target file `group1'.
Must remake target `group1'.
Successfully remade target file `group1'.
Considering target file `group2'.
File `group2' does not exist.
Looking for an implicit rule for `group2'.
Trying pattern rule with stem `group2'.
Trying implicit prerequisite `/home/eaa/czped/test_make/dev_dir/group2'.
Trying pattern rule with stem `group2'.
Trying implicit prerequisite `/home/eaa/czped/test_make/dev_dir/group2'.
Looking for a rule with intermediate file
`/home/eaa/czped/test_make/dev_dir/group2'.
Avoiding implicit rule recursion.
No implicit rule found for `group2'.
Considering target file `subdir1/file4'.
Looking for an implicit rule for `subdir1/file4'.
Trying pattern rule with stem `file4'.
Trying implicit prerequisite `subdir1//home/eaa/czped/test_make/dev_dir/file4'.
Trying pattern rule with stem `file4'.
Trying implicit prerequisite `subdir1//home/eaa/czped/test_make/dev_dir/file4'.
Looking for a rule with intermediate file
`subdir1//home/eaa/czped/test_make/dev_dir/file4'.
Avoiding implicit rule recursion.
No implicit rule found for `subdir1/file4'.
Finished prerequisites of target file `subdir1/file4'.
No need to remake target `subdir1/file4'.
Considering target file `subdir1/file5'.
Looking for an implicit rule for `subdir1/file5'.
Trying pattern rule with stem `file5'.
Trying implicit prerequisite `subdir1//home/eaa/czped/test_make/dev_dir/file5'.
Trying pattern rule with stem `file5'.
Trying implicit prerequisite `subdir1//home/eaa/czped/test_make/dev_dir/file5'.
Looking for a rule with intermediate file
`subdir1//home/eaa/czped/test_make/dev_dir/file5'.
Avoiding implicit rule recursion.
No implicit rule found for `subdir1/file5'.
Finished prerequisites of target file `subdir1/file5'.
No need to remake target `subdir1/file5'.
Considering target file `subdir1/file6'.
Looking for an implicit rule for `subdir1/file6'.
Trying pattern rule with stem `file6'.
Trying implicit prerequisite `subdir1//home/eaa/czped/test_make/dev_dir/file6'.
Trying pattern rule with stem `file6'.
Trying implicit prerequisite `subdir1//home/eaa/czped/test_make/dev_dir/file6'.
Looking for a rule with intermediate file
`subdir1//home/eaa/czped/test_make/dev_dir/file6'.
Avoiding implicit rule recursion.
No implicit rule found for `subdir1/file6'.
Finished prerequisites of target file `subdir1/file6'.
No need to remake target `subdir1/file6'.
Finished prerequisites of target file `group2'.
Must remake target `group2'.
Successfully remade target file `group2'.
Finished prerequisites of target file `main'.
Must remake target `main'.
Successfully remade target file `main'.