Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 汽车制造商:AM_CFLAGS没有效果_Unix_Gcc_Compilation_Autotools_Automake - Fatal编程技术网

Unix 汽车制造商:AM_CFLAGS没有效果

Unix 汽车制造商:AM_CFLAGS没有效果,unix,gcc,compilation,autotools,automake,Unix,Gcc,Compilation,Autotools,Automake,我试图在Automake中添加一些编译选项,但这些方法都不起作用 这是我的配置.ac: AC_INIT(...) AC_PREREQ([2.59]) AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([1.10 foreign -Wall no-define]) AC_PROG_CXX AC_PROG_LIBTOOL AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile src/Makefil

我试图在Automake中添加一些编译选项,但这些方法都不起作用

这是我的
配置.ac

AC_INIT(...)
AC_PREREQ([2.59])
AC_CONFIG_AUX_DIR([build-aux])
AM_INIT_AUTOMAKE([1.10 foreign -Wall no-define])
AC_PROG_CXX
AC_PROG_LIBTOOL
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile src/Makefile test/Makefile])
AC_LANG(C++)
AC_OUTPUT
我有父级
Makefile.am
(在顶级目录中):

以及每个源目录的
Makefile.am
<代码>src/Makefile:

include_HEADERS = ...
lib_LIBRARIES = ...
#AM_CFLAGS = ... # doesn't work
bin_PROGRAMS = myprog #test
myprog_SOURCES = ...
myprog_LDADD = ../src/libmylib.a
#myprog_CFLAGS = ... # Doesn't work either
测试/Makefile

include_HEADERS = ...
lib_LIBRARIES = ...
#AM_CFLAGS = ... # doesn't work
bin_PROGRAMS = myprog #test
myprog_SOURCES = ...
myprog_LDADD = ../src/libmylib.a
#myprog_CFLAGS = ... # Doesn't work either
我尝试取消注释所有注释行的组合,即:

  • AM\u CFLAGS=…
    添加到父
    Makefile.AM
    -这应该为所有受影响的源设置CFLAGS
  • AM\u CFLAGS=…
    添加到其他两个
    Makefile.AM
    s
  • 将myprog添加到Makefile.am中(编译myprog时应设置CFLAGS)
但这些都没有任何效果。我的程序(
myprog
)和它的库(
mylib
)都被编译/链接到一些默认标志,它们类似于
-DHAVE\u CONFIG-g-O2

我还尝试使用
包含
而不是
AM\u CFLAGS
,但没有帮助

有人知道这里发生了什么,以及如何修复吗

  • 看起来像是在编译C++,在这种情况下,使用的变量是“代码> AycxXFLACK< <代码> .<
  • 设置
    AM\u cxflags
    应该在
    Makefile.AM
    中,声明您实际编译的内容(即
    bin\u程序
    lib\u库
    ,…)
  • 如果你在重复自己的话,别忘了automake支持一个
    include
    语句
  • 这被认为是有害的。现代automake支持
    细分对象
    。如果一个
    Makefile.am
    无法控制,请使用
    include
    语句
  • 打开libtool的现代方式是
    LT_INIT
    ,而不是
    AC_PROG_libtool
  • AC_LANG(C++)
    configure.AC
    点上不做任何事情。它设置运行配置测试时要使用的语言。此外,
    AC_LANG_PUSH
    AC_LANG_POP
    是更聪明的方法
  • 为什么要这样分配给
    ACLOCAL\u AMFLAGS

  • 我尝试按照建议将
    AM\u CFLAGS
    添加到父Makefile.AM,但没有成功。当我将其添加到相关的Makefile.am时,它结束了引入两个冲突的
    -g
    选项的过程,如下所示:

    libtool: link: gcc -std=gnu99 -g -O0 -g -O2 -Wl -pthread ...
    
    禁用优化的正确方法是在需要的Makefile.am中添加
    CFLAGS=-g-O0
    。如果由于某种原因更改未生效,请尝试删除Makefile.in和Makefile(无扩展名)

    以下是正确的链接器指令:

    libtool: link: gcc -std=gnu99 -g -O0 -Wl -pthread ...
    

    谢谢顺便问一下,你说的7是什么意思,你会怎么做?我是自动工具新手,不用担心
    ACLOCAL\u AMFLAGS
    是设置要传递给
    ACLOCAL
    的额外标志的地方(如果有自定义宏目录,通常类似于
    -I m4
    )。如果您没有设置
    ACLOCAL\u FLAGS
    ,那么应该根本不需要该行。“禁用优化的正确方法是将
    CFLAGS=-g-O0
    添加到Makefile.am”,该文件发出警告:“CFLAGS”是一个用户变量,您不应该重写它;改为使用“am\u CFLAGS”