【问题标题】:Linking files through makefiles通过 makefile 链接文件
【发布时间】:2014-08-07 04:08:14
【问题描述】:

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

目录结构为:

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.

【问题讨论】:

  • 你要么需要提供每个文件的相对/完整路径,要么使用类似vpath 指令的东西。
  • 通过“链接它们”,您是否想让 main.cpp 中的#include <abc.h> 包含 main_dir/dir2/abc.h?
  • @immibis 是的,我想要那个!
  • @immibis 任何想法如何实现它?

标签: c++ linker makefile


【解决方案1】:

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

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

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

您需要将其更改为:

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

【讨论】:

  • 我只需要在 makefile 中执行此操作。我已经编辑了我的问题。请检查!
【解决方案2】:

你已经有了

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>

【讨论】:

    猜你喜欢
    • 2017-09-23
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多