Mail Archives: cygwin/2004/06/08/07:55:22
Hi,
Firstly, i thank Dave K. for helping me.
I don't understand all functionnalities of VPATH, but i think that i don't
used it.
You can find below a minimal test case that demonstrates the problem.
I wish to make it clear that directories name with letter '_' seem maybe to
be the source of problem !
You can find sources files below.
Thanks,
Seb.
Directory tree is :
Test_pb_path
|
+-- ver_100
|
+---- c : files root.c and foo.c
|
+---- s : file init.S
|
+---- compiler : file makefile
|
+---- obj
root.c :
extern int foo(void);
int root(void);
/* root function */
int root(void)
{
int i=0, j;
while(1) {
i++;
j = foo();
}
}
foo.c :
/* foo function */
int foo(void) {
return(55);
}
init.S :
.text
.globl _start
_start:
/* Call C function */
bl root
.end
makefile :
# Compiler selection
PROC = powerpc
TYPE = eabi
GCC_VER = 3.3.2
COMPILER_DIR = /opt/crosstool/$(PROC)-$(TYPE)/gcc-$(GCC_VER)
PATH_TMP := $(PATH)
PATH = $(COMPILER_DIR)/bin:/usr/bin:.:$(PATH_TMP)
CC = $(PROC)-$(TYPE)-gcc
LD = $(PROC)-$(TYPE)-ld
SHELL = /bin/sh
# Files list
SRC_APP_S = ../s/init.S
SRC_APP_C = ../c/root.c ../c/foo.c
# Listing of all source files
SRC_DEP = $(SRC_APP_S:.S=.d) $(SRC_APP_C:.c=.d)
SRC_OBJ = $(foreach file,$(SRC_DEP), obj/$(notdir $(file:.d=.o)) )
# Linker command name
LDFLAGS = -g --cref -lgcc -Lobj
# Check if dependencies are correct
EXTERNAL_FILES_D = $(strip $(sort $(wildcard obj/*.d)))
INTERNAL_FILES_D = $(strip $(sort $(SRC_OBJ:.o=.d)))
ifeq ($(EXTERNAL_FILES_D), $(INTERNAL_FILES_D))
all: test_pb_path.elf
test_pb_path.elf: $(SRC_OBJ)
@echo 'Linking $@'
@$(LD) -g -o obj/test.elf $(SRC_OBJ)
# includes all dependency files
include obj/*.d
else # else => dependencies are not correct
recover_dep: clean_all $(SRC_DEP)
endif
clean_all cl:
@-/bin/rm -f obj/*.*
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Create a file.d for each file.c which contains dependencies!
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%.d:%.c
@echo 'Make dependencies of $<'
@$(CC) -MM $(@:.d=.c) | sed -u s/'$(notdir $(@:.d=.o)):'/'obj\/$(notdir
$(@:.d=.o)):'/g > obj/$(notdir $@)
@echo ' @echo Building $$@' >> obj/$(notdir $@)
@echo ' @$$(CC) -c $$< $$(CFLAGS) -o $$@' >> obj/$(notdir $@)
%.d:%.S
@echo 'Make dependencies of $<'
@$(CC) -MM $(@:.d=.S) | sed -u s/'$(notdir $(@:.d=.o)):'/'obj\/$(notdir
$(@:.d=.o)):'/g > obj/$(notdir $@)
@echo ' @echo Building $$@' >> obj/$(notdir $@)
@echo ' @$$(CC) -c $$< $$(ASFLAGS) -o $$@' >> obj/$(notdir $@)
#DO NOT DELETE
> -----Original Message-----
> From: cygwin-owner On Behalf Of Sébastien Douheret
> Sent: 07 June 2004 17:37
> To: cygwin
> Subject: makefile syntax %.d:%.c misunderstood
>
> Hi,
> i have a strongly problem with make under cygwin !
> Make don't understand this syntax %.d:%.c of my makefile.
Then you've typed something wrong. Cygwin make has no problem with that
format. I use it all the time successfully.
> If sources files are on my local drive (eg. :
> "c:\dev\sources"), make is
> successful, but if my sources files are on network drive
> mounted as /f, an
> error occurs during compilation :
> make: *** No rule to make target `../c/boardboot.d',
> needed by `make_dep'.
> Stop.
>
> Is it a problem of mount ?
Most likely something's wrong in your makefile. Are you using a hardcoded
VPATH that makes it work on your C drive but not any other? Can you strip
down your makefile to a minimal test case that demonstrates the problem
using just a single .c file and %.d:%.c rule?
cheers,
DaveK
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -