2015-04-02 3 views
0

У меня есть проект латекса, содержащий как минимум два варианта: printable (ведьма положила ссылку на сноску) и monochrome (ведьма положила документ шерсти на черный). Эти параметры могут использоваться как единый параметр или его можно использовать одновременно (если мне нужен монохромный документ со ссылками в сносках).Использование множественных и комбинируемых целей makefile

Таким образом, это скелет моего Makefile:

printable: 
    ${TEX} -jobname=${NAME} "\def\isprintable{1} \input{main.tex}" 

monochrome: 
    ${TEX} -jobname=${NAME} "\def\ismonochrome{1} \input{main.tex}" 

Этот код только позволяет мне получить документ о формате для печати X или монохромного документа. Но не дважды в одно и то же время.

Я попытался целью printable monochrome:, но в этом случае, я всегда получаю печатный и монохромный документ, а также, когда я призываю сделать с только из printable или monochrome цели. Я не могу получить только монохромный документ или единственный документ, пригодный для печати.

Итак, возможно ли создать структуру ifthen перед целями в make-файле для оценки целей, вставленных перед выполнением?

Что-то вроде:

if targets contain monochrome 
    then: ARG=${ARG} "\def\ismonochrome{1}" 

if tragets contain printable 
    then: ARG=${ARG} "\def\isprintable{1}" 

${TEX} -jobname=${NAME} "${ARG} \input{main.tex}" 

Можно ли сделать это с помощью Makefile или я должен разработать другой способ?

ответ

0
ifdef MONOCHROME 
ARGS += \\def\\ismonochrome{1} 
endif 

ifdef PRINTABLE 
ARGS += \\def\\isprintable{1} 
endif 

project: 
    ${TEX} -jobname=${NAME} \"$(ARGS)\" 

Вы можете вызвать это, например,

make MONOCHROME=true PRINTABLE=yes 

Обратите внимание, что некоторые «побега» может быть необходимо иметь дело с двойными кавычками, бэк-слэш и другие специальные символы; это может потребовать некоторой тонкой настройки в вашей системе.

+0

Кажется, что работает, кроме одной детали: оператор '+ =' помещает пробел между первым контентом и следующим контентом. Например, с 'VAR + = 1; VAR + = 2 переменная 'VAR' будет равна' 1 2', а не '12'. Есть способ исправить это? Возможно, другой оператор конкатенации? – fauve

+0

Лучший оператор для использования здесь: ': ='. Он не пустил места. Итак, вы могли бы @Beta отредактировать сообщение, чтобы исправить его для других пользователей? Спасибо. – fauve

+0

@fauve: пространство там по дизайну; ваш вопрос не совсем ясен, но он настоятельно предполагает, что опустить пространство было бы неправильно. Возможно, вы захотите изменить свой вопрос, чтобы показать нужную командную строку. – Beta

Смежные вопросы