【问题标题】:Install arbitrary data files in fixed location with Automake?使用 Automake 在固定位置安装任意数据文件?
【发布时间】:2012-05-30 02:42:00
【问题描述】:

如何告诉automake 在我想要的位置安装任意数据文件?

我有一些文件需要放在特定位置,例如“datafile1”,在我的项目中,需要复制到“/usr/MyProduct/flash_memory”。

  • /usr/MyProduct/flash_memory”是我无法更改的绝对路径。
  • datafile1”是二进制数据文件,不是make“构建”的,只需要make install复制即可。
  • 我无法忍受make dist。需要make install复制(解释比较长,请注意)。
  • 我宁愿不使用install-hook,但更喜欢使用更优雅的方法(如果可能的话)。

非常感谢!

【问题讨论】:

    标签: autotools automake datadirectory


    【解决方案1】:

    不要在 Makefile.am 中使用完整路径。曾经。您可以告诉 automake 将 datafile1 放入将扩展为 $(prefix)/share/MyProduct$(datadir),或者您可以定义 flash_DIR 扩展为 $(prefix)/MyProduct/flash_memory 并将文件放在那里,但必须允许最终用户设置$(prefix)/usr 或其他。你想在 Makefile.am 中做的是:

    flashdir = $(prefix)/$(PACKAGE)/flash_memory
    flash_DATA = datafile1
    

    (使用$(prefix)/@PACKAGE@/flash_memory 可能更合适,因为PACKAGE 可能不应该在制作时修改,但我认为这不是非常重要。)

    然后,当您是用户时,运行make install,前缀设置为/usr。如果您尝试在 Makefile.am 中使用绝对路径,它将不允许分阶段安装(即设置 DESTDIR),会限制用户的灵活性,并且是错误的事情。要点是包维护者无法选择最终位置;这是用户的决定。

    【讨论】:

    • 正如我之前所说,“/usr/MyProduct/flash_memory”是我无法更改的绝对路径。这不是我的选择。忽略这一点,我尝试了“confdir=... conf_DATA=datafile1”,但没有成功。有什么提示吗?谢谢
    • @fljx 当您说“我无法更改”时,您是指作为安装包的用户的“我”,还是当您是包维护者时的“我”。如果是前者,我的回答有效。如果您的意思是后者,请停止使用 automake;你在滥用这个工具。
    • 我的意思是“我,服从老板的工人”。无论如何,我将confdir 更改为“confdir = $(prefix)/usr/awmg/flash/”并且它有效。绝对路径没有。我只是想了解为什么,现在...再次感谢!
    • 您应该始终尊重 $(prefix) 和 $(DESTDIR)。它使打包变得更加容易(例如,有人想在某一天创建 debian/ubuntu 包......)并且默认值(基本上)会满足你的老板。只需创建一个使用“--prefix=/usr”运行配置的包装脚本,并告诉他们这是配置程序的方式,而不是直接调用配置
    • @umlaeute - 感谢您指出这一点,但不应将 DESTDIR 添加到 flashdir,因为 automake 在 install-flashDATA 规则中添加了 DESTDIR。我的解决方案中是否有需要在前面添加 DESTDIR 的内容?
    猜你喜欢
    • 2014-12-23
    • 2011-11-03
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多