простая установка с помощью bjam

Я новичок в boost.build, и хотя bjam довольно прост в использовании для большинства задач компиляции, я не понял, как сделать что-то, что должно быть действительно простым: установить мое приложение в систему.

Скажем, у меня есть очень простой проект с двумя файлами в дереве (помимо Jamroot).

  • hello.cpp : программа на C++ сообщает, что печатает содержимое /etc/hello.conf

  • hello.conf : hello.conf по умолчанию

Что я хочу сделать, так это:

  • иметь возможность скомпилировать и связать hello.cpp без установки чего-либо в масштабе всей системы
  • when called with an install target (and only then) :
    • copy executable hello to /usr/bin
    • скопируйте hello.conf в /etc.

Ниже бжам, который я начал писать:

exe hello : hello.cpp ;
alias install : install-bin  install-etc ;
install install-bin : hello : <location>/usr/bin ;
install install-etc : hello.conf : <location>/etc ;

Моя проблема в том, что как пользователь я не могу писать ни в /etc, ни в /usr/bin, и я хочу, чтобы это делалось только при явном вызове цели установки, а не каждый раз, когда я набираю bjam.

Для меня очень важно разделить этапы установки и сборки, так как этап сборки должен выполняться с правами пользователя, а этап установки — с правами администратора.


person kriss    schedule 29.10.2009    source источник


Ответы (1)


То, что вы написали, кажется хорошим, за исключением двух вопросов. Во-первых, последняя строка должна быть такой:

install install-etc : hello.conf : <location>/etc ;
explicit install install-bin install-etc ;

Во-вторых, псевдоним install должен относиться как к install-bin, так и к install-etc. Когда вы вносите эти изменения, все работает?

person Vladimir Prus    schedule 29.10.2009
comment
Спасибо. Это решает, как копировать часть файла конфигурации (как вы указали, в конце концов, это была просто опечатка из-за того, что я забыл ввести «установить как цель» :-( Я удалил эту часть вопроса). Это не решает другую Проблема: Как выполнить установку только при явном вызове заданной цели и не делать этого по умолчанию. Вероятно, это так же просто, как добавить какое-то правило :-( - person kriss; 30.10.2009
comment
добавить явную установку install-bin install-etc ; где-нибудь в Джемфайле - person Vladimir Prus; 30.10.2009
comment
Хорошо, это определенно то, что я искал. (если вы можете отредактировать свой ответ, было бы неплохо, потому что ответ только в комментарии). Я все еще удивляюсь, почему bjam выполняет ссылку для установки вместо копирования файла, когда он уже существует, но на самом деле это не проблема (это также позволяет избежать остановки и перезапуска запущенного exe в Linux, но я не уверен, что это задумано, похоже на побочный эффект) - person kriss; 02.11.2009