- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ROS 构建一个项目,因此,catkin_make 用于构建我的 ROS 节点和库。
我面临的问题是:我在一个包(包 A)中使用一个 git 子模块(因此,我有一个分层的包含文件夹结构)并且我在引用该子模块中的头文件时遇到困难。
为了构建依赖于包 A 的包 B,我在包 A 中的 catkin_package 命令中添加了 INCLUDE_DIRS 语句:
catkin_package(
INCLUDE_DIRS my-submodule/include
...
)
该目录的内容是:
my-submodule/my-header.h
(我把头文件放在一个文件夹下,以子模块命名,因为许多教程都指出在 ROS 中你应该使用这个约定)。
package-B 文件中的 include 语句如下所示:
...
#include <my-submodule/my-header.h>
...
这工作正常 - 正在构建包 B(因为我正在使用一个组合工作区来构建它)。
但是:当我切换到目标系统时,我只安装包 A,然后尝试构建包 B(在该目标系统上),它不会构建,因为包含路径是设置不正确。
包 A 的 INSTALL 语句如下所示
install(DIRECTORY my-submodule/include
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
FILES_MATCHING PATTERN "*.h"
PATTERN ".svn" EXCLUDE
)
这主要是因为目标系统上安装的文件夹结构是这样的:
.../ros/include/my-package-A/include/my-submodule/my-header.h
因此,安装过程实际上将该子模块的包含路径放在 package-A-include 路径下(与我直接在一个组合工作区中构建包时相比,这是一种不同的路径结构)。
而用于编译的CFLAGS只将include目录设置为文件夹:
.../ros/include
因此,破坏了我的 package-B 文件中的 include 语句:
#include <my-submodule/my-header.h>
你知道如何解决这个问题吗?我敢肯定有比我更多的人试图从包中的子模块引用头文件。
最佳答案
假设您有一个文件 my-submodule/include/my-submodule/my-header.h
在你的包 A 中,然后对你的 install() 语句进行两个小的更改应该可以解决这个问题:
install(DIRECTORY my-submodule/include/
DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION}
FILES_MATCHING PATTERN "*.h"
PATTERN ".svn" EXCLUDE
)
首先,在路径中添加一个斜杠(.../include/
而不是 .../include
),这导致了 include
的内容要安装的文件夹而不是 include
文件夹本身(否则你最终会得到 ../ros/install/include/include/my-submodule/my-header.h
)
其次,使用${CATKIN_GLOBAL_INCLUDE_DESTINATION}
(指向 .../ros/install/include/
)而不是 ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
(指向 .../ros/install/my-package-A/include/
)作为目的地。
另一种方法是修复柳絮,因为
catkin_package(
INCLUDE_DIRS my-submodule/include
...
)
理论上应该已经导出 my-submodule/include
, 所以你可以在包 B 中使用
find_package(catkin REQUIRED DEPENDS my-package-A)
catkin_package(
CATKIN_DEPENDS my-package-A
)
include_directories(${catkin_INCLUDE_DIRS})
不幸的是,出于某种原因,这在使用 catkin config --install
时显然是不可能的。 .参见 https://answers.ros.org/question/335846/install_dirs-not-working-as-expected-when-using-install/ .
关于git-submodules - 柳絮/ROS : How-to specify include path correctly when using submodules,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50009126/
我有一个子模块,当我执行 git status 时,我得到: modified: (modified content) 我跑: git submodule update 但仍然得到: modi
我有一个子模块,当我执行 git status 时,我得到: modified: (modified content) 我跑: git submodule update 但仍然得到: modi
有什么区别吗 git submodule init && git submodule update --recursive 和 git submodule update --init --recurs
我掌握了 git submodule 的窍门(一厢情愿?),我想出了更具体的问题,这是一个好兆头...... 我试图在 .gitmodules 中找到 super 项目所指的子模块的哪个版本。和 .g
我花了很多时间阅读和尝试 git 子模块。但我真的放弃了。 我的问题: 我正在克隆一个 git 存储库作为子模块。所以,我做 git submodule add -b master url local
我无法推送我对 git 子模块所做的更改。我已经推送了主项目,得到了这个 mainProject$ git status On branch myBranch Changes not staged f
我正在使用 ROS 构建一个项目,因此,catkin_make 用于构建我的 ROS 节点和库。 我面临的问题是:我在一个包(包 A)中使用一个 git 子模块(因此,我有一个分层的包含文件夹结构)并
我在当前存储库中用作子模块的存储库名称是 droid-media-lib,但是放置此子模块的目录名称是 库 所以我的.gitmodules 看起来像这样 [submodule "droid-media
标题可能听起来有点含糊,但这里有一个错误的例子。假设我们有三个模块 ModuleA、ModuleB 和 ModuleC,因此 ModuleA 依赖于 ModuleB 和 ModuleB 依赖于 Mod
我有一个包含嵌套子模块的 git 仓库。下面两个命令有什么区别? git submodule update --init --recursive git submodule foreach --rec
我有一个 dotfiles 存储库,其中我所有的 vim 插件都存储为子模块,因此当它们有更改时很容易更新。我以为这两个命令做同样的事情,但我注意到这一定不是这种情况。 我知道我在几个子模块中有更新要
当我执行 git submodule update --init 时出现错误 fatal: Needed a single revision Unable to find current revisi
我正在使用 git submodule 在项目之间构建和共享组件。该项目尚未投入生产,因此,此时子模块运行良好。 但是我担心维护和部署,将其转换为 npm 包是个好主意吗? 最佳答案 一个 npm 包
typing 模块将两个类 io 和 re 导出为“伪子模块”,如下所示。通过赋予它们 __all__ 并将它们添加到 sys.modules 中,使它们看起来像模块的目的是什么? 我理解将它们排除在
在我 git submodule update 之后,它总是检查同一个提交。例如 34561。 我为子模块执行 git checkout master,然后执行 git submodule sync。
我一直对此感到困惑: $ git submodule You need to run this command from the toplevel of the working tree. 为什么我需
我刚 pull https://github.com/kolanos/kohana-universe现在我正在尝试更新所有正在运行的模块: git submodule update --init --
我觉得使用 Git 子模块对我的开发工作流程来说有点麻烦。我听说过 Git 子树和 Gitslave。 是否有更多适用于多个存储库项目的工具以及它们如何比较? 这些工具可以在 Windows 上运行吗
我正在尝试开发具有不同“子模块”的 API。例如,有一个称为“todo”,另一个称为“newsletter”。 我想要做的是,我希望能够在开发过程中运行模块本身,并且我希望能够在服务器上运行整个 AP
我正在尝试将子模块支持添加到 project of mine ,但是我似乎无法使用 JGit 来读取特定的提交或记录,而命令行 git 可以很好地做到这一点,尽 pipe 模块所在的头部是分离的(就子
我是一名优秀的程序员,十分优秀!