1

我写这个问题的部分原因是关于 helper-scripts 的相关问题

我有一个用自动工具构建的 C++ 软件系统。对于它的一小部分功能,我的系统使用了一个封闭源代码的预构建二进制文件:AMPL。我是他们软件的免费学生版。假设我在 C++ 代码中调用的 AMPL 二进制文件的名称是ampl-student. system(...)我使用调用从我的代码中运行它。

当运行“make install”时,我想与我编译的 C++ 代码的二进制文件一起ampl-student移动。/usr/bin我应该在Makefile.am的哪个位置添加ampl-student. 我应该将它添加到bin_PROGRAMS变量中吗?

一个相关的问题是我什至应该ampl-student输入/usr/bin. “辅助二进制文件”是否有更合适的位置?

我认为这通常是一个坏主意,因为将预构建的二进制文件与代码一起分发并不能保证二进制文件将在最终用户的计算机上运行。但在这种情况下,用户群非常小,我碰巧知道他们都使用相同的系统配置。所以我们实际上是在使用 deb 包来让每个人都了解软件系统的新版本。

编辑 1:我应该强调,问题首先是询问在autotools 使用ampl-studentMakefile.am文件中指定的位置。

4

2 回答 2

6

我将它安装在$(pkglibexecdir)

pkglibexec_PROGRAMS = ampl-student

# If you need to know the path in your code
AM_CPPFLAGS = -DPKGLIBEXECDIR=\"$(pkglibexecdir)\"

它不是真正的用户程序,因此将其安装在不碍事的地方。默认情况下,这将是$(prefix)/libexec/$(package).

于 2011-04-11T01:34:13.613 回答
0

这实际上取决于您是要发布该软件还是将其本地安装在 /usr/bin 中,并且所有用户都将从那里访问该软件。

  1. 如果您要将它安装在 /usr/bin 中并且也想将 AMPL 放在那里,请为路径定义一个符号常量并使用它。
    #define AMPL /usr/bin/ampl-student
    无论你想使用哪个源文件,你都可以添加,
    system(AMPL);
  2. 如果您想发布代码的二进制文件,则应将 ampl-bin 放在软件的 bin 目录中或创建一个目录。结构为:

<你的工具>/src
<你的工具>/bin - 你也可以把ampl-student放在这里
<你的工具>/third-party/< tool1 > ....< tooln >/bin/ 你可以把ampl-student放在这里

正如您在分发 ampl-student 之前正确提到的那样,确保它适用于应该运行该工具的所有平台。

于 2011-04-11T00:06:50.860 回答