【问题标题】:scons uninstall runs Substfilescons 卸载运行 Substfile
【发布时间】:2021-07-03 03:56:31
【问题描述】:

我已经创建了 SConstruct 来安装 systemd 用户服务,但是当我尝试 scons uninstall 时,会创建临时服务文件,这不应该发生。

import os

PATH_WD = os.path.abspath(os.curdir)

env = Environment(
    SUBSTFILESUFFIX = '.service',
    SUBST_DICT      = { '{{PATH_ROOT}}' : os.path.dirname(PATH_WD) },
    ENV             = {
        'DBUS_SESSION_BUS_ADDRESS' : os.environ['DBUS_SESSION_BUS_ADDRESS'],
        'XDG_RUNTIME_DIR'          : os.environ['XDG_RUNTIME_DIR']
    }
)

INSTALLED = env.Install(
    target = os.path.expanduser('~/.config/systemd/user/'),
    source = [
        env.Substfile('service1'),
        env.Substfile('service2'),
    ]
)
env.AddPostAction(INSTALLED, env.Action('systemctl --user daemon-reload'))

Alias('install', INSTALLED)

NoClean(INSTALLED)

Command('uninstall', INSTALLED, Delete(INSTALLED))

Default('install')

【问题讨论】:

    标签: python systemd scons


    【解决方案1】:

    第二次尝试..

    这是一个对你有用的简单示例..

    env=Environment()
    
    prog=env.Program('main.c')
    Default(prog)
    
    installed_prog = env.Install('install_dir', prog)
    Alias('install', installed_prog)
    NoClean(installed_prog)
    
    # You don't have to specify targets to Alias.. so it won't 
    # try to build those before executing the Action 
    Alias('uninstall', action=Delete(installed_prog))
    AlwaysBuild('uninstall')
    
    
    

    【讨论】:

    • 现在没有卸载目标,当我运行scons uninstall 时,我知道有'scons -c' 来清理有什么要卸载的吗?
    • 好点。我会更新我的答案。我已经有一段时间没有使用 Alias 了。有更好的方法。
    • 上述解决方案也有效。但我不明白为什么我们需要做AlwaysBuild('uninstall') 以及Command('uninstall', [], Delete(installed_prog)) 似乎太有用了。
    • AlwaysBuild 部分只是说不要费心检查过时性,以防万一您要求进行卸载似乎不是很有用,因为您的意思是它和这不是一个“真正的”目标。
    • Command(....) 是一名建设者。这意味着 SCons 需要一个源和一个目标,并且它将创建目标。这不是你想要的。您只需要一个命令行目标来运行删除文件的操作。因此我提供的解决方案。 (我提供的解决方案类似于make中的.PHONY目标)
    【解决方案2】:

    SCons 构建器调用是节点之间关系的陈述。您已通过调用 Command 构建器将目标 "uninstall" 与源 INSTALLED 相关联。因此,为了“构建”这个目标,您需要源,源是调用Install 构建器返回的节点列表。所以Install 必须在uninstall 发生之前发生。您是否有理由不希望在这里使用 SCons 的干净功能?要查看此内容,请尝试:scons --tree=all,linedraw -n uninstall

    【讨论】:

    • 谢谢你的解释有没有更好的方法来完成这样的任务?
    猜你喜欢
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2017-03-03
    相关资源
    最近更新 更多