gpt4 book ai didi

c - Autotools:将 -D 与变量一起使用适用于除一次编译以外的所有编译(C 编程)

转载 作者:行者123 更新时间:2023-12-04 10:27:15 25 4
gpt4 key购买 nike

我正在将带有手写 Makefile.in(当然还有 configure.in)的旧自动工具设置转换为最新的( Makefile.amconfigure.ac)。到目前为止一切看起来都很好,但我遇到了一些我无法在其他问题中找到答案的问题。

我在 Makefile.am 中添加了一个定义,它包含在我在 _SOURCES 中指示的所有 c 模块的编译中,但只有一个。我看不出 c 源代码之间有什么区别,除了编译中不包含定义的那个是程序的主体。

Makefile.am 代码下方(相关部分):

bin_PROGRAMS = wpe we 
lib_LTLIBRARIES = libxwpe-x11.la libxwpe-term.la
libxwpe_x11_la_SOURCES = we_xterm.c WeXterm.c
libxwpe_x11_la_CPPFLAGS = -DLIBRARY_DIR=\"@libdir@/xwpe\"
libxwpe_term_la_SOURCES = we_term.c
libxwpe_term_la_CPPFLAGS = -DLIBRARY_DIR=\"@libdir@/xwpe\"
wpe_SOURCES = we_main.c we_block.c we_unix.c we_e_aus.c \
we_edit.c we_fl_fkt.c we_fl_unix.c we_hfkt.c \
we_menue.c we_mouse.c we_opt.c we_wind.c \
we_prog.c we_progn.c we_debug.c WeString.c \
WeSyntax.c WeExpArr.c WeLinux.c we_gpm.c
wpe_LDADD = libxwpe-x11.la libxwpe-term.la
wpe_CPPFLAGS = -DLIBRARY_DIR=\"@libdir@/xwpe\"
we_SOURCES = we_main.c we_block.c we_unix.c we_e_aus.c \
we_edit.c we_fl_fkt.c we_fl_unix.c we_hfkt.c \
we_menue.c we_mouse.c we_opt.c we_wind.c \
we_prog.c we_progn.c we_debug.c WeString.c \
WeSyntax.c WeExpArr.c WeLinux.c we_gpm.c

编译的结果是所有的 c 源代码都使用 LIBRARY_DIR 的定义进行编译,除了 we_main.c 是在没有这个定义的情况下编译的。

有谁知道是什么导致了这种差异?我究竟做错了什么?我不应该定义 wpe_CPPFLAGS 而应该定义其他标志吗?

编辑 1: 查看 Makefile,我注意到它多次编译 we_main!它创建 we-we_main.owpe-we_main.oxwe-we_main.o。这些文件都编译正确,但我唯一不明白的是 we_main.o 的编译,它是在没有定义的情况下编译的。看起来我缺少一个我应该定义的标志。可能我误解了 Makefile.am 中的 automake 输入。我应该定义一个额外的标志吗?如果有,是哪一个?

编辑 2: 多次编译似乎有点浪费。我是 autotools 的新手,所以可能会有更好的解决方案。如有必要,我将针对此主题提出不同的问题。

最佳答案

由于在 EDIT 1 中的观察,我找到了答案。首先,我使用了 CPPFLAGS = -DLIBRARY_DIR=\"@libdir@/xwpe\".autoreconf警告我更好地使用AM_CPPFLAGS`,所以我这样做了,这解决了问题.

此外,我发现我不需要所有程序特定的 we_CPPFLAGSwpe_CPPFLAGSxwe_CPPFLAGS,因为 AM_CPPFLAGS 添加到所有。

显然,如果 xxx 与其他程序不同,您只需要特定的 xxx_CPPFLAGS

很抱歉打扰了大家。我希望这对有相同查询的其他人有所帮助。

编辑 1: 此更改还删除了相同来源的多个编译。事后看来,这是有道理的:如果xxx_CPPFLAGS特定于一个程序,那么程序xxx需要单独编译。如果它们都具有相同的标志,则不再需要这样做。

关于c - Autotools:将 -D 与变量一起使用适用于除一次编译以外的所有编译(C 编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44983339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com