C++ 通过makefile链接文件

C++ 通过makefile链接文件,c++,linker,makefile,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_LIB

我有两个相同级别的目录。我想使用在另一个目录的源文件中的一个目录中创建的头文件。我希望在不提供头文件的相对或绝对路径的情况下实现相同的功能

目录结构为:

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

我得到一个错误:
没有规则使目标为'libmain.a'所需的'libabc.a'。停止。

您可以将
-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
你已经有了

AM_CPPFLAG = -I$(main_dir)/dir1 \
     $(APP_CFLAGS)
只需将
-I$(主目录)/dir2
添加到其中:

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

因此,现在您可以在代码中包含。

您需要提供每个文件的相对/完整路径,或者使用类似于指令的内容。通过“链接它们”,您是否希望在main.cpp includes main\u dir2/abc.h中包含@我想知道如何实现它?我只需要在makefile中完成。我已经编辑了我的问题。请检查!