Я думаю, что на самом деле у вас есть 2 вопроса: - Как это сделать - почему это не работает в моем случае.
Способ сделать это почти так же, как вы, новам нужно все процитировать
ifdef(`my_foo_m4',,`define(`my_foo_m4',1)
changequote([,])
')
Проблема заключается во втором включении файла, предложение было изменено, поэтому теоретически вы должны включить следующий файл (вы изменили предложение на [
, ]
поэтому все файлы, которые вы включаете, должны использовать [
, ]
, не так ли?):
ifdef([my_foo_m4],,[define([my_foo_m4],1)
changequote([[],])
])
но вы включаете тот же файл с оригинальной цитатой, поэтому выifdef находится на символе `my_foo_m4'
(который, вероятно, недействителен), а не my_foo_m4
, а бит else
define(`my_foo_m4',1)
changequote([,])
не заключен в кавычки (не между []) и поэтому оценивается независимо от результата тестаэто означает, что он вызывает changequote с ,
, то есть он вызывает
changequote(,)
, что отключает кавычку.