= 更改包的默认构建标志 =

<<TOC(4)>>

== 默认构建标志 ==

默认情况下,我们的农场使用`dpkg-buildflags`命令来获取在Debian/Ubuntu上构建的默认标志。这可以归结为这些旗帜:

 * `-DCMAKE_BUILD_TYPE=None`
  * 根据Debian文档,这样做是为了防止CMake覆盖其他设置的标志。
 * `-O2`
  * 这是Debian/Ubuntu的默认优化标志。
 * `-DNDEBUG`
  * 默认情况下,我们显式地将此添加到所有包中。

为了理解我们为什么来到这里,请看看这个问题: https://github.com/ros-infrastructure/bloom/issues/327

== 更改构建标志 ==

如果你想要更改只用于构建的标志,比如选择退出`-DNDEBUG`或选择`-O3`,那么你将需要在你的发布存储库中修改缺省的debian配置。

在进行此操作之前,至少要使用其他教程中的一篇来发布你的包。

你可以通过编辑`debian/rules.em`来更改标志。在debian发布分支中为你的包提供的文件。更改标志是在每个包和每个ROS发行版基础上完成的,所以如果你有一个包含3个包的版本存储库,那么你将需要为每个ROS发行版做3个补丁。首先克隆你的发布存储库:

{{{
$ git clone https://github.com/<your organization>/<your RELEASE repository>
}}}

注意,这是你的发布库,而不是你提交代码的上游存储库。

在克隆你的发布存储库后,更改为包和ROS发行版的分支,你希望更改以下标记:

{{{
$ cd <folder you checked it out to>
$ git checkout debian/<rosdistro>/<package_name>
}}}

例如,如果你的包名是`foo`,而你将其更改为Indigo,那么你将执行`git checkout debian/indigo/foo`之类的操作。

在这个分支中会有一个叫做debian的文件夹,在那个文件夹里会有一个没有扩展的模板文件。其中一个模板将被称为`rules.em`。你将编辑该文件并提交更改以更改标志。

如果你想退出`-DNDEBUG`这是默认的,你可以删除模板中的行这样做:

 {{{
# Explicitly enable -DNDEBUG, see:
# 	https://github.com/ros-infrastructure/bloom/issues/327
export DEB_CXXFLAGS_MAINT_APPEND=-DNDEBUG
}}}

如果您想添加`-O3`优化标志,覆盖默认的`-O2`标志,然后添加到`DEB_CXXFLAGS_MAINT_APPEND`环境变量`-O3`,如下所示:

 {{{
export DEB_CXXFLAGS_MAINT_APPEND=-DNDEBUG -O3
}}}

一旦你做了任何你想做的修改,然后提交你的改变和推动:

{{{
$ git commit -am <some message about how you changed the flags>
$ git push
}}}

一旦你推动了这个变更,你将需要为变更发布一个新的debc-inc版本,以便将其传播到工厂。

所以,一旦你对你想要修改的每个包和ROS发行版做了修改,再运行`bloom-release`:

{{{
$ bloom-release -r <rosdistro> -t <rosdistro> <repository name>
}}}

这将从`<package_version>-0`到`<package_version>-1`,例如:`0.1.0-0`到`0.1.0-1`,然后打开一个新的pull请求。一旦合并,工厂将使用你的改变。

你可以通过检查构建工程使用的标记来验证你的更改是否在那里,例如`debian/ros-indigo-rviz_0.11.4-1_trusty`。

你的包的未来版本,例如`0.1.0`到`0.1.1`,将得到你在这里所做的补丁,但是当发布一个新的ROS发行版时,你将需要再次采取这些步骤,因为这样的补丁不会自动传播到新的ROS发行版。