Как я могу проигнорировать присвоение переменной командной строки в рекурсивной сборке?

Это еще один вариант, который не был предложен ранее. NROW рассматривает ваш вектор как матрицу из 1 столбца.

v[-max(NROW(v))]#1 2
v1[-max(NROW(v1))]#4 5 6 7

Исходя из вышеизложенного, это (немного) быстрее, чем все другие предложенные методы:

x <- rnorm(1000)
system.time(replicate(50000, y <- head(x, -1)))
user  system elapsed 
3.446   0.292   3.762
system.time(replicate(50000, y <- x[-length(x)]))
user  system elapsed 
2.131   0.326   2.472
system.time(replicate(50000, y <- x[-max(NROW(x))]))
user  system elapsed 
2.076   0.262   2.342
6
задан Ludwig Weinzierl 3 June 2009 в 18:11
поделиться

3 ответа

Может быть, вы можете использовать директиву "unexport", чтобы предотвратить распространение TARGET в make-файл B?

0
ответ дан 17 December 2019 в 18:19
поделиться

В точке, где система сборки A вызывает систему сборки B, не используйте ' $ {MAKE} »напрямую; вызвать сценарий оболочки, который вызывает систему сборки B (возможно, после очистки среды).

Чтобы добиться поведения, при котором команды выполняются с помощью ' make -n ', добавьте к командной строке в make-файле префикс « + » (аналогично префиксу строки « @ » или « - »).

0
ответ дан 17 December 2019 в 18:19
поделиться

Вы можете установить для параметра MAKEOVERRIDES значение ничего в make-файле второго уровня в A.

callb:
      cd subdir && $(MAKE) MAKEOVERRIDES=

Это передает стандартные параметры командной строки, такие как -k и -s , но не определения переменных командной строки.

Или вы используете исторический MFLAGS , который аналогичен MAKEFLAGS , за исключением MFLAGS не содержит определений переменных командной строки.

callb:
     cd subdir && $(MAKE) $(MFLAGS)

Подробности об этих двух параметрах можно прочитать здесь: Руководство GNU Make

3
ответ дан 17 December 2019 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: