string で区切られたファイルのリストを含む変数があります_NEWLINE_
。各ファイルが別々の行になるように、その変数をファイルに出力する必要があります。秘訣は、FreeBSD と Solaris で動作する必要があることです。
これは私が今試していることです:
echo "lib/alarms-1.2/priv/snmp_conf/agent.conf: lib/alarms/priv/snmp_conf/agent.conf_NEWLINE_lib/alarms-1.2/priv/snmp_conf/agent.conf.src: lib/alarms/priv/snmp_conf/agent.conf.src_NEWLINE_lib/alarms-1.2/priv/snmp_conf/community.conf: lib/alarms/priv/snmp_conf/community.conf" | sed 's|_NEWLINE_|\'$'\n|g'
これは、FreeBSD と Solaris のシェルで動作します。しかし、Solaris で GNUmakefile を実行すると、次のようになります (各行の末尾に $ があることに注意してください)。
lib/alarms-1.2/priv/snmp_conf/agent.conf: lib/alarms/priv/snmp_conf/agent.conf$
lib/alarms-1.2/priv/snmp_conf/agent.conf.src: lib/alarms/priv/snmp_conf/agent.conf.src$
lib/alarms-1.2/priv/snmp_conf/community.conf: lib/alarms/priv/snmp_conf/community.conf$
sed から削除する\'$'
と、Solaris では動作しますが、FreeBSD では動作しません。メイクファイルが実行されるシステムに応じて、使用するバージョンを伝える方法があるのでしょうか?
編集: bobbogo によって提案された解決策のおかげで、望ましい結果を提供し、FreeBSD と Solaris の両方で動作しているように見える模範的なメイクファイルを作成しました。
one-line := lib/alarms-1.2/priv/snmp_conf/agent.conf: lib/alarms/priv/snmp_conf/agent.conf_NEWLINE_lib/alarms-1.2/\
priv/snmp_conf/agent.conf.src: lib/alarms/priv/snmp_conf/agent.conf.src_NEWLINE_lib/alarms-1.2/priv/snmp_conf/comm\
unity.conf: lib/alarms/priv/snmp_conf/community.conf
many-lines := { echo '$(subst _NEWLINE_,' && echo ',${one-line})'; }
.PHONY: all
all:
$(shell $(many-lines) > test.txt)