- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我一直在寻找这个:我目前正在将一个中型程序转换为自动工具,来自基于 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"
但得到一个应用了意外标志的构建,那么你有一个错误并且你的包损坏。这是一种非常常见的体验,如果您维护一个包(目前正在考虑 tmux
和 curl
),其中用户无法获得任何合理的人所说的调用 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/
我有一个 div,我希望使用 css 显示为 :target。到目前为止,这工作正常。我的问题是:我希望它淡入淡出。 我的代码: Content #stuff { opacity:0;
我想找到在Rust构建中使用的libc.so文件,以便我可以使用--version进行查询。 (一些libcs通过C宏公开其版本信息,因此,它们的另一种选择是在构建脚本中使用cc条板箱。但其他诸如
我仍然不明白为什么 Makefile 中的“虚假”规则将“.PHONY”作为其目标。作为先决条件,这会更合乎逻辑。 我需要详细说明这一点吗?如果A依赖于B并且B是假的,那么A也是假的。因此,与 .PH
在 Fortran 语言中,向具有 TARGET 属性的虚拟参数的过程提供不具有 TARGET 属性的参数应该会导致无效代码。但是,当使用 gfortran (5.1.0) 或 ifort (14.0
如果有人发布过相同的问题,请原谅我,我找不到类似问题的答案。 当我单击带有 #dotNetComponents url 的按钮时,它会将我带到带有 dotNetComponents ID 的 div,
我想用 :target 伪类更改我的 html 中元素的样式。我的标记(第一个是按钮,第二个是目标元素): Call to action target CSS: #btn01:target { b
下面提到的示例代码是 Keith Wood 的 jQuery Countdown 插件的一部分。有人能解释一下吗 _attachCountdown: function(target, options)
我是 React 的新手。这绝对让我感到困惑。我可以使用 event.target 访问 HTML 元素,它显示的值等于某个数字,但每次我使用 event.target.value 时,我都会得到 u
这个问题是关于交叉编译的。 使用 swift 编译器的 -target 或 -target-cpu 选项可以使用哪些不同的目标?我在哪里可以找到概述? 它只能用于创建 iOS/watchOS 应用程序
在CKEditor 5中,我没有在链接对话框中看到目标属性的字段。 如何添加这样的字段?或将target = _blank设置为默认值。 谢谢 最佳答案 从Link Plugin的11.1.0版本开始
问题:FAKE 中是否有一个命令可以打印构建脚本中所有定义的目标? 我想以这样的方式设置我的 FAKE 构建:当我不指定目标时,它会打印构建脚本中所有可用目标的列表。 例如: > build.cmd
尝试使用 Visual Studio 2013 Update 3 创建一个新的 Cordova“空白应用程序”。 我看到了模板,但是当尝试打开空白应用程序时,我得到: The imported pro
http://download.oracle.com/javase/6/docs/api/java/lang/annotation/Target.html 此元注释指示声明的类型仅用作复杂注释类型声明
使用CocoaPods,有什么区别 target :TargetName do # Some pods... end 和 target "TargetName" do #
我正在尝试仅使用 CSS 制作一个简单的移动菜单切换。通过显示和隐藏两个按钮,这些按钮具有指向显示或隐藏导航菜单的类的不同链接。 是本教程的编辑link ,但现在我想让关闭和打开按钮位于单独的 div
以下是包含简单日志文件目标的简单 nlog 配置。我的问题是如何为 Nlog.Targets.Redis 添加目标? 最佳答案 以下是 NLog.Targets.Redis 的正确配置。如果
我想知道您是否可以将一个单元测试包链接到多个目标。因此,可以使用一个测试包测试所有应用程序目标。 我在所有应用程序目标之间有一些共享代码,但也有一些基于正在运行的应用程序目标的特定计算。 目前,如果我
我在 VSTS 中使用部署组将我的应用程序部署到本地测试 Web 服务器。 它已经运行良好很长时间了,但是在大约 6 周没有使用它之后,我现在遇到了这个错误,我想修复它; 最佳答案 您的代理未运行或无
使用 CMake 构建开源项目时(在我的例子中,它是柠檬图库),当我尝试通过 -DBUILD_SHARED_LIBS=1 构建共享库时出现此错误。 : TARGETS given no LIBRARY
尝试安装 ionic,添加 android 平台时出现以下错误 Error: Please install Android target "android-19". Hint: Run "androi
我是一名优秀的程序员,十分优秀!