Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将目录传递给C++;来自编译器的应用程序_C++_Directory_Autotools - Fatal编程技术网

C++ 将目录传递给C++;来自编译器的应用程序

C++ 将目录传递给C++;来自编译器的应用程序,c++,directory,autotools,C++,Directory,Autotools,某些应用程序包含由驻留在/usr/libexec中的主应用程序运行的脚本。但是,autoconf脚本可以通过将--libexecdir传递到配置脚本来更改该目录 例如,在git源代码中运行/configure时,我可以将--libexecdir设置到我想要的任何目录,程序仍然可以工作 我需要添加什么C++来实现这个功能?换句话说,我怎样才能有一个由配置脚本编译到程序中的目录名?,您需要C++代码的值< @ LbExcRedir@ < /Cord>替换变量(如在代码> > MaMeCuff.in

某些应用程序包含由驻留在/usr/libexec中的主应用程序运行的脚本。但是,autoconf脚本可以通过将
--libexecdir
传递到配置脚本来更改该目录

例如,在
git
源代码中运行
/configure
时,我可以将
--libexecdir
设置到我想要的任何目录,程序仍然可以工作


<>我需要添加什么C++来实现这个功能?换句话说,我怎样才能有一个由配置脚本编译到程序中的目录名?

,您需要C++代码的值< <代码> @ LbExcRedir@ < /Cord>替换变量(如在代码> > MaMeCuff.in <代码>中使用)。要做到这一点,最简单、最可靠的方法是在目标文件的编译器命令行上使用
-D
开关,该文件需要知道:

foo.o: CPPFLAGS += -DLIBEXECDIR='"$(libexecdir)"'
foo.cc
中,
LIBEXECDIR
将是一个预处理器宏,扩展为具有所需路径的字符串常量。不过有两个警告:上面的Makefile片段使用了GNU make特性。它在其他Make实现中不起作用。另外,我没有在
$(libexecdir)
的扩展中引用任何字符。完全防御性的报价应该是这样的:

foo.o: CPPFLAGS += \
  -DLIBEXECDIR='"$(subst ",\",$(subst ','\'',$(subst \,\\,$(libexecdir))))"'
如果您希望能够使用Windows路径名,并且斜杠走错了方向,那么您肯定需要至少最里面的
$(subst…
构造。人们通常不会在路径名中加上“或”,所以在有人抱怨之前,我可能不会去管外面的两个

同样的技术也适用于任何不是
AC\u DEFINE
@替代变量


您可能认为您可以使用
AC\u DEFINE\u UNQUOTED
以某种方式将
$(libexecdir)
的值输入
config.h
,从而避免命令行中的所有混乱。不幸的是,Autoconf在配置时没有完全计算其
@*dir@
替换的值:

# near the top of the generated 'configure':
exec_prefix=NONE
libexecdir='${exec_prefix}/libexec'

# much, much later -- as part of AC_OUTPUT:
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
因此,如果您使用
AC\u DEFINE\u UNQUOTED
做一件显而易见的事情,您将得到如下结果

#define LIBEXECDIR "${exec_prefix}/libexec"
在你的config.h.中,这是行不通的,我看不到一个好的方法来让它工作