私はmakefilesを初めて使用しますが、この問題に悩まされています。見つかったディレクトリ内のすべてのファイルへのシンボリックリンクを作成する方法。これはすべてルール内にあります。
「find」を呼び出すと結果が取得されるかどうかを知りたいです。結果を「eval」(ルール内に変数を設定するために私が知っている唯一の方法)の変数に割り当てると、「ifdef」評価は機能しません。
「」と「ifneq」を比較してみましたが、うまくいきません。
おそらく私は間違った方向に進んでいるので、誰かが別のアプローチをとっていれば、私は非常に感謝します。
ここにMakefile全体があります:(######でマークされた興味深い行)
大いに感謝する!
DEFAULT_YCS_ROOT := /opt/yujin
all:
ifdef YCS_ROOT
@echo Looking for Yujin maps in ${YCS_ROOT}
else
$(eval YCS_ROOT := ${DEFAULT_YCS_ROOT})
@echo WARNING: YCS_ROOT is undefined. Looking for Yujin maps in default path ${YCS_ROOT}
endif
$(eval MAPS_DIR := $(shell find ${YCS_ROOT} -name yujin_maps))
@echo ${MAPS_DIR} "${MAPS_DIR}"
ifdef MAPS_DIR ######
###### misguided alternative.... ifneq (${MAPS_DIR}, " ")
$(eval DEST_DIR := $(shell pwd)/resources/yaml/stage/maps)
@echo Creating symbolic links on ${DEST_DIR} for every PGM map on ${MAPS_DIR}/maps
rm ${DEST_DIR}/*.pgm
for f in ${MAPS_DIR}/maps/*.pgm; do ln -s $$f ${DEST_DIR}/; done
else
@echo ERROR: Yujin maps package not found in ${YCS_ROOT}. Define YCS_ROOT variable properly
endif