通过makefile链接文件

时间:2014-08-07 04:08:14

标签: c++ linker makefile

我在同一级别有两个目录。我想使用在另一个目录的源文件中的一个目录中创建的头文件。我想实现相同的目的,而不提供头文件的相对或绝对路径。

目录结构是:

main_dir/
  dir1/
     main.cpp
     Makefile.am
  dir2/
     abc.h
     abc.cpp
     Makefile.am

main.cpp需要abc.h。应该在两个目录的makefile中写什么来链接它们?

修改

dir2的Makefile.am

noinst_LIBRARIES = libabc.a
AM_CPPFLAG = -I$(main_dir)/dir2 \
     $(APP_CFLAGS)

libabc_a_SOURCES = abc.h \
     abc.cpp

dir1的Makefile.am

noinst_LIBRARIES = libmain.a
AM_CPPFLAG = -I$(main_dir)/dir1 \
     $(APP_CFLAGS)

libmain_a_SOURCES = main.cpp

libmain_a_LIBADD = libabc.a

我收到错误:No rule to make target 'libabc.a', needed by 'libmain.a'. Stop.

2 个答案:

答案 0 :(得分:0)

您可以将-I选项与gcc或clang一起使用。 (注意这与makefile没有直接关系)

示例:如果当前目录是main_dir,并且您当前正在运行该命令:

gcc -c -o dir1/main.o dir1/main.cpp

您需要将其更改为:

gcc -Idir2 -c -o dir1/main.o dir1/main.cpp

答案 1 :(得分:0)

你已经拥有

AM_CPPFLAG = -I$(main_dir)/dir1 \
     $(APP_CFLAGS)

只需将-I$(main_dir)/dir2添加到其中:

AM_CPPFLAG = -I$(main_dir)/dir1 \
    -I$(main_dir)/dir2 \
    $(APP_CFLAGS)

现在您可以在代码中#include <abc.h>