O
olaoni
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...
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...