Jump to content

Recommended Posts

Guest olaoni
Posted

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...