Это вызвано ленивностью - map
возвращает ленивую последовательность, которая определена внутри привязки, но оценивается снаружи. Вам необходимо принудительно выполнить оценку изнутри:
(binding [*out-dir* "/home/dave"]
(doall (map #(str *out-dir* %) [1 2 3])))
Если cmake генерирует make-файлы, можно просто включать сгенерированный make-файл в основной make-файл, например,
# makefile
all: # Default
include $GENERATED
$GENERATED:$CMAKEFILE
# Generate the makefile here`
, включенные файлы сгенерированы, затем делают, перезапущен с новыми включенными файлами. Включенные файлы должны детализировать цели, и т.д.
необходимо смочь изменить местоположение используемых файлов с помощью vpath директивы, видеть, например, , Гну еще делает руководство ,
vpath %.o project/.build
, утомительный путь состоит в том, чтобы переписать правила, делающие примечание к необходимому каталогу.
Ed: Возможно, мы не должны использовать плоский make-файл.
Попытка что-то как:
# makefile
all: gui test
clean:
$(MAKE) -f $(GUI-MAKE) clean
$(MAKE) -f $(TEST-MAKE) clean
gui:$(GUI-MAKE)
$(MAKE) -f $(GUI-MAKE) all
$(GUI-MAKE):$(GUI-CMAKE)
# Generate
# Same for test
Это должно работать, если $ (ДЕЛАЮТ)-f $ (GUI - ДЕЛАЮТ), все работы команды над командной строкой, и мы скрыли cmake в генерирующейся цели. Необходимо было бы скопировать любые другие цели в основной make-файл также и заботиться, работая, делают параллельно.
объектные файлы Распространения через должны включить что-то как [1 112]
%.o:$(GUI-MAKE)
$(MAKE) -f $(GUI-MAKE) $@
, хотя Вы, вероятно, получите ошибки, пытающиеся сделать тестовые объекты