Guest olaoni Posted July 2, 2014 Posted July 2, 2014 To Whom It May Concern, I am trying to learn the usage of VPATH in a makefile, but does not seems to be working for me. I am sure I am doing something wrong and hoping that someone would point this out to me I have the following makefile named Makefile ################MAKEFILE################## #INCLUDE = /path/to/the/general.h INCLUDE = ./inc VPATH = ./src:./inc obj=$(patsubst %.c,%.o,$(wildcard *.c)) main: $(obj) general.h gcc -g -o $@ $^ -I$(INCLUDE) %.o: %.c gcc -g -c -o $@ $< -I$(INCLUDE) clean: rm -r *.o main ######### END OF MAKEFILE ##################### ############ main.c ####################### #include <stdio.h> #include <general.h> int main(int argc, char** argv) { print_foo(); print_bar(); return 0; } ############ end main.c #######################. ########### bar.c ###################### #include <general.h> void print_bar(void) { printf("Hello bar.\n"); } ######### end of bar.c ############### ############# foo.c ############### #include <general.h> void print_foo(void) { printf("Hello foo.\n"); } ############ end of foo.c ############ ########### general.h #################### #ifndef GENERAL_H #define GENERAL_H #include <stdio.h> void print_foo(void); void print_bar(void); #endif ########### end of general.h ############## Below is the tree directory structure in the file system Code: . ├── inc │ └── general.h ├── main.c ├── main.o ├── Makefile └── src ├── bar.c └── foo.c My understanding that make will search the path assigned to the VPATH variables hence "src" and "inc" in this case but when I build it get the following linker error. ############# OUTPUT ################ gcc -g -o main main.o -I./inc main.o: In function `main': /home/olaoni/devl/make-tutor/main.c:5: undefined reference to `print_foo' /home/olaoni/devl/make-tutor/main.c:6: undefined reference to `print_bar' collect2: error: ld returned 1 exit status make: *** [main] Error 1 ##################################### Many thanks in advance. Regards onio Continue reading... Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.