gpt4 book ai didi

c++ - GNU 自动工具 : Debug/Release targets?

转载 作者:IT老高 更新时间:2023-10-28 13:22:54 25 4
gpt4 key购买 nike

我一直在寻找这个:我目前正在将一个中型程序转换为自动工具,来自基于 Eclipse 的方法(使用 makefile)

我总是习惯于“调试”构建,包含所有调试符号且没有优化,以及“发布”构建,没有调试符号和最佳优化。

现在我正在尝试使用 autotools 以某种方式复制它,因此我可以(也许)执行以下操作:

./configure
make debug

其中包含所有调试符号且没有优化,以及在哪里:

./configure
make

将产生“发布”版本(默认)

PS:我已经阅读了有关 --enable-debug 标志/功能的信息,但在我当前(简单)的设置中,configure

无法识别使用它

最佳答案

ismail 的解决方案是一种常见的方法,但它存在一些严重的问题。如果用户尝试通过执行 './configure --enable-debug' 来获得调试版本,则配置脚本会将 CFLAGS 设置为 '-g -O2' 并且 Makefile 将使用 '-g3 -O0 ... -g -O2' 构建任何可执行文件时。在这种情况下,gcc 将使用 -O2,并且一些编译器会因为 -O 选项冲突而中止。这两种情况都不是预期的行为。

是否使用调试符号构建不是项目维护者应该担心的事情根本。这是用户的问题。如果您正在构建项目并且想要进行调试构建或发布构建,则应在配置时使用不同的选项。例如,

$ mkdir debug
$ mkdir release
$ cd debug && /path/to/configure --prefix=/dbg \
CPPFLAGS=-DDEBUG CFLAGS="-g -O0" && make && make install
$ cd ../release && /path/to/configure CPPFLAGS=-DNDEBUG && make && make install

这将在/dbg/bin 中安装带有 `-DDEBUG' 和 '-g -O0' 的构建(“调试构建”),并在/usr/local/bin 中安装“发布”

您可以通过使用 CONFIG_SITE 文件来减少必要的打字工作。例如,您可以这样做:

echo 'CPPFLAGS=-DDEBUG CFLAGS="-g -O0"' >> /dbg/share/config.site

然后所有 future 的 'configure --prefix=/dbg' 调用将自动继承 CPPFLAGS 和 CFLAGS 的设置,无需在命令行上指定。

如果作为包维护者,您想为用户提供一种构建“调试版本”的简单方法,那么在分发中包含一个脚本是完全可以接受的,该脚本使用适当的参数调用配置脚本并调用make && make install,但绝对没有必要在你的自动工具元文件中乱扔垃圾。它根本不属于那里。请注意,许多软件包都试图添加 --enable-debug 这是完全错误的。如果用户调用 configure CFLAGS="-g -O0" 但得到一个应用了意外标志的构建,那么你有一个错误并且你的包损坏。这是一种非常常见的体验,如果您维护一个包(目前正在考虑 tmuxcurl),其中用户无法获得任何合理的人所说的调用 configure CFLAGS="-g -O0" 后“调试构建”,那么你的包就损坏了

在使用 autotools 维护包时必须始终记住的重要一点是,用户可能使用与您完全不同的工具链。用户的工具链完全有可能需要 -DMAKE_IT_A_DEBUG-DUSE_DEBUG-I/non/standard/path/to/headers .也许它需要 -O145-Q 传递给编译器或 -debug 传递给链接器,或...任何东西。作为维护者,您根本没有必要的信息来使短语“调试构建”对所有用户都有意义。所以不要尝试,因为您可能会使特定用户无法构建该软件。

关于c++ - GNU 自动工具 : Debug/Release targets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4553735/

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