使用(nobase_)pkginclude_HEADERS在子目录中安装头文件
Installing headers in subdirectories with (nobase_)pkginclude_HEADERS
在安装头文件时,我在automake处理子目录时遇到了一个小问题。
下面是我的项目层次结构:
foo/
foo-bin/
Makefile.am
...
foo-tests/
Makefile.am
...
foo-lib/
Makefile.am
include/
foo/
header1.h
subdir/
header2.h
src/
file1.cpp
没什么特别的,有一个根目录包含configure.ac
,还有3个子目录用于共享库、主二进制文件和测试。
有趣的部分是foo-lib/
。它包含二进制文件和测试文件链接到的库。
由于我希望能够从源树中生成配置文件,因此我决定在Makefile.am
中使用$top_srcdir
-相对路径。
内容如下:
libfoo_la_SOURCES =
$(top_srcdir)/foo-lib/src/file1.cpp
pkginclude_HEADERS =
$(top_srcdir)/foo-lib/include/foo/header1.h
$(top_srcdir)/foo-lib/include/foo/subdir/header2.h
如果没有这些$top_srcdir
相对路径,当我尝试从foo-bin
中使用foo-lib
时,或者当我尝试从源代码树中生成项目时,我会遇到问题。
现在的问题是:当安装这些头文件时,它们最终会变平!也就是说,我最终得到:
$prefix/include/foo/header1.h
$prefix/include/foo/header2.h
when I was expected:
$prefix/include/foo/header1.h
$prefix/include/foo/subdir/header2.h
所以我认为这是nobase_
应该实现的,但由于我使用的路径不是相对于Makefile.am
,而是相对于$top_srcdir
,我最终复制了整个$top_srcdir
路径:
$prefix/include/foo-lib/include/foo/header1.h
$prefix/include/foo-lib/include/foo/subdir/header2.h
这显然不是我们所期望的
任何关于这方面的想法和建议都非常感谢:)如果您需要访问真正的Makefile.am
文件,而不是规范的示例,项目在这里:
This:
pkginclude_HEADERS =
$(top_srcdir)/foo-lib/include/foo/header1.h
$(top_srcdir)/foo-lib/include/foo/subdir/header2.h
告诉安装程序将上面的头文件放在$(pkgincludedir)
中,就像你告诉它们的那样平坦。
你可以这样做:
myincludesubdir=$(pkgincludedir)/subdir
pkginclude_HEADERS = $(top_srcdir)/foo-lib/include/foo/header1.h
myincludesub_HEADERS = $(top_srcdir)/foo-lib/include/foo/subdir/header2.h
这应该安装header1.h
到$(pkgincludedir)
和header2.h
到$(myincludesubdir)
也就是$(pkgincludedir)/subdir
。
在这种情况下我不会使用nobase_
。在我看来,使用它得到的结果并不意外或错误。
相关文章:
- 在Ubuntu 16.04上安装Cilk时出现问题
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- C++:如何在CLion IDE中安装Boost
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 安装opencv失败-粘贴CMakeError.log的内容
- 在cygwin中测试新的boost安装时出现cpp错误
- 有人安装"IITB Simplecpp in mac"吗?
- 我怎样才能将所有子目录与 cmake 自动匹配
- 我可以在 Arduino 的库文件夹之外安装库吗?
- Mingw-64 在构建和安装后不会编译 openCV 代码
- 为什么构建目录中新构建的共享库与安装目录中的副本具有不同的依赖项集?
- 安装 libc++ 时出现问题
- 安装MinGW后C++编译器不起作用?
- 介子复制/安装头文件到输出目录并保持文件夹结构
- 无法安装 R 包 "nloptr"(Ubuntu 16.04 上的 R3.6.2) - C++编译器问题
- 如何在 Ubuntu 上安装 OpenCV for C/C++
- 检查是否安装了 windows10 C++
- 使用(nobase_)pkginclude_HEADERS在子目录中安装头文件
- 在cmake中我如何从子目录安装共享库