自动工具/自动生成:添加包含路径的好方法 我在Linux环境下使用了AutoTooCAD编译C++项目。 我写入的所有包含路径都是相对的(例如:-i../path0/inc-i../path1/path2/inc-i../../path3/inc)

自动工具/自动生成:添加包含路径的好方法 我在Linux环境下使用了AutoTooCAD编译C++项目。 我写入的所有包含路径都是相对的(例如:-i../path0/inc-i../path1/path2/inc-i../../path3/inc),path,include,autotools,automake,Path,Include,Autotools,Automake,一切都很好,直到我决定在树构建目录中构建我的项目,因为所有的对象文件都在源文件中 当然,编译不再像我预期的那样有效 因此,我有几个问题: 我必须在每个include前面添加我自己@srcdir@吗?(例如:AM_CPPFLAGS=-I@srcdir@/path0/inc-I@srcdir@/../path1/inc) 或者什么是好方法 我必须在每个include前面添加我自己@srcdir@吗?(例如:AM_CPPFLAGS=-I@srcdir@/path0/inc-I@srcdir@/../p

一切都很好,直到我决定在树构建目录中构建我的项目,因为所有的对象文件都在源文件中

当然,编译不再像我预期的那样有效

因此,我有几个问题:

  • 我必须在每个include前面添加我自己@srcdir@吗?(例如:AM_CPPFLAGS=-I@srcdir@/path0/inc-I@srcdir@/../path1/inc)
  • 或者什么是好方法
  • 我必须在每个include前面添加我自己@srcdir@吗?(例如:AM_CPPFLAGS=-I@srcdir@/path0/inc-I@srcdir@/../path1/inc)
  • 或者什么是好方法
  • 要正确支持树外构建,是的,您需要显式表示相对于源目录的include目录。命令行参数中的任何其他源树路径,除了通过表示规则先决条件的
    make
    自动变量表示的路径


    然而,就个人而言,我更喜欢使用Automake提供的
    $srcdir
    和/或
    $top\u srcdir
    变量,而不是Autoconf提供的
    @srcdir@
    替换。

    我更喜欢
    $srcdir
    ,主要是因为它的抽象级别与
    Makefile.am
    更匹配。我将其推广到所有Autoconf输出变量:应该在
    Makefile.am
    文件中使用变量形式。
    @
    分隔的表单适合在实际模板中使用,例如
    Makefile.in
    中,但是如果将Automake与Autoconf一起使用,则不能直接使用Makefile模板。