使用GNU AutoTools设置和使用数据目录的路径
Setting and using path to data directory with GNU AutoTools
我正在尝试在我的c++项目中使用GNU AutoTools。我写了configure。ac, makefile。我等等。我有一些文件是由程序在执行期间使用,如模板文件,XML模式等。因此,我沿着可执行文件安装/复制这些文件,对于可执行文件,我使用如下命令:
abcdir = $(bindir)/../data/abc/
abc_DATA = ../data/knowledge/abc.cc
现在它正确地复制了文件,我的程序安装结构看起来如下:
<installation_dir>/bin/<executableFile>
<installation_dir>/data/abc/abc.cc
现在的问题是,在源代码中,我实际上使用这些文件(abc。cc等),为此,我需要这些文件所在的路径来打开它们。一种解决方案是定义(使用AC_DEFINE)一些变量,例如_ABC_PATH_,它指向安装路径,但如何准确地做到这一点呢?或者有更好的方法。例如,在源代码中,我这样做:
...
ifstream input(<path-to-abc-folder> + "abc.cc"); // how to find <path-to-abc-folder>?
..
AC_DEFINE解决方案原则上是好的,但是需要进行类似shell的变量展开。也就是说,_ABC_PATH_将展开为"${bindr}/.."/data/abs",而不是/data/abc。
一种方法是通过-D标志定义路径,该标志可以通过make: 展开myprogram_CPPFLAGS += -D_ABC_PATH='"${abcdir}"'
,它在原则上工作得很好,但你必须使include配置。myprogram的依赖项状态。
如果您有许多这样的替代变量,您应该推出一个path .h文件,它是由automake生成,规则如下:
paths.h : $(srcdir)/paths.h.in config.status
sed -e 's:@ABC_PATH@:${abcdir}:' $< > $@
作为旁注,你知道${prefix}和${datarootdir}和朋友,不是吗?如果没有,最好仔细阅读;$ {bindir}/. .如果用户设置了${exec_prefix},则不一定等于${prefix}。
相关文章:
- 更改应用程序数据的路径
- 如何在测试运行期间获取资源的目录路径
- 尝试使用堆栈简化目录路径时出现未解决的分段错误
- 包含一批库和目录路径以"Include Additional Directories"视觉C++的任意方法
- 在Windows上,何时有必要将附加到目录路径上,以使_stat成功
- 如何从Windows中的可执行文件中推断出文件/目录路径
- C 获取目录路径,解析文件夹名称和来自Parent Directory的打印文件内容
- 在C 中的FSTREAM中设置默认目录路径
- Visual Studio 2010 包括目录路径
- C++:在比较 boost::文件系统中的路径时,如何忽略第一个目录路径
- 如何将目录路径转换为唯一的数字标识符 (Linux/C++)
- wxWidgets:控件或对话框以选择目录路径
- QT创建者|如何使用行编辑读取目录(路径)
- 提升 API 以检查目录路径是否在 c++ 中的网络上
- C++ Winapi - 获取目录(路径)标识符
- 在C++中获取iPhone目录路径
- C++查找数据目录的跨平台解决方案
- 按句柄的目录路径
- CMake包含路径和源路径与Windows目录路径不同
- 使用GNU AutoTools设置和使用数据目录的路径