使用自动工具安装前缀
Use autotools installation prefix
我正在编写一个C++程序,使用gtkmm作为窗口库,使用autotools作为构建系统。在我的Makefile.am中,我安装了如下图标:
icondir = $(datadir)/icons/hicolor/scalable/apps
icon_DATA = $(top_srcdir)/appname.svg
编辑:从prefix
更改为datadir
这导致在安装程序时appname.svg
被复制到$(datadir)/icons/hicolor/scalable/apps
。在我的C++代码中,我想在运行时访问用于窗口装饰的图标:
string iconPath = DATADIR + "/icons/hicolor/scalable/apps/appname.svg";
// do stuff with the icon
我不确定如何为此目的获得DATADIR
。我可以使用相对路径,但移动二进制文件会破坏图标,这似乎很明显是黑客行为。我认为应该有一种特殊的方式来处理与一般数据分离的图标,因为人们可以安装第三方图标包。所以,我有两个问题:
- 安装
并将图标与autotools/C++/gtkmm
编辑:gtkmm有一个IcTheme类,它是在gtkmm中使用图标的标准方式。看起来我add_resource_path()
(我仍然需要安装前缀(,然后我可以使用库按名称获取图标。
- 使用autotools/C++访问autotools安装前缀的通用方法是什么
要将configure
确定的数据传送到源文件,可用的主要方法是将它们写入源#include
的标头中,或者在编译器命令行上将它们定义为宏。通过AC_DEFINE
Autoconf宏可以最方便地处理这些问题。在某些情况下,您可能还会考虑将源文件转换为模板以供configure
处理,但除非Autoconf本身使用该技术的内部版本来构建config.h
(当需要时(,否则我通常不会推荐它
但是,安装前缀和其他安装目录是特殊情况。在实际运行make
之前,它们不会最终设置。即使您通过configure
的命令行选项设置它们,您仍然可以通过在make
命令行上指定不同的值来覆盖它们。因此,依赖AC_DEFINE
实现这一特定目的是不安全的,事实上,这样做可能根本不起作用(对prefix
本身不起作用(。
相反,您应该在make
时间评估的命令行选项中指定适当的宏定义。您可以通过在Makefile.am
文件中设置AM_CPPFLAGS
变量来为正在构建的所有目标执行此操作,如另一个答案所示。该特定示例将指定的符号设置为一个宏,该宏扩展为包含前缀的C字符串文字。或者,您可以考虑将整个图标目录定义为一个符号。如果您只需要为几个目标中的一个目标使用它,那么您可能更喜欢设置适当的onetarget_CPPFLAGS
变量。
顺便说一句,请注意$(prefix)/icons/hicolor/scalable/apps
是图标安装目录的非标准选择。这通常会解决类似/usr/local/icons/hicolor/scalable/apps
的问题。传统的选择是$(datadir)/icons/hicolor/scalable/apps
,它将解析为类似/usr/local/share/icons/hicolor/scalable/apps
的内容。
在Makefile.am中,使用以下
AM_CPPFLAGS = -DPREFIX='"$(prefix)"'
请参阅autoconf手册中的定义目录。
- 在Ubuntu 16.04上安装Cilk时出现问题
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- C++:如何在CLion IDE中安装Boost
- 安装opencv失败-粘贴CMakeError.log的内容
- 在cygwin中测试新的boost安装时出现cpp错误
- 有人安装"IITB Simplecpp in mac"吗?
- 编译器如何在前缀和 postix 运算符之间进行区分?
- 我可以在 Arduino 的库文件夹之外安装库吗?
- Mingw-64 在构建和安装后不会编译 openCV 代码
- 为什么构建目录中新构建的共享库与安装目录中的副本具有不同的依赖项集?
- 安装 libc++ 时出现问题
- 安装MinGW后C++编译器不起作用?
- 介子复制/安装头文件到输出目录并保持文件夹结构
- 无法安装 R 包 "nloptr"(Ubuntu 16.04 上的 R3.6.2) - C++编译器问题
- 如何在 Ubuntu 上安装 OpenCV for C/C++
- 检查是否安装了 windows10 C++
- 查找带有 Anaconda cmake 前缀的 boost-python3
- 使用自动工具安装前缀
- 将 "Qt5Widgets" 的安装前缀添加到CMAKE_PREFIX_PATH
- 在Windows中获取安装前缀的最佳方法是什么