Как использовать разные значения для CC в зависимости от цели в gnumake - PullRequest
0 голосов
/ 16 февраля 2011

У меня есть одна кодовая база, которую я хотел бы использовать для достижения двух разных "целей" Один требует, чтобы я скомпилировал с g ++ (мы используем gtest для цели модульного теста), другой требует gcc4, наш удаленный код - ANSI C.

Я пытаюсь использовать целевые переменные gnu make для достижения этой цели

так что у меня

unit_test_target: CC=g++
unit_test_target: unit_test_pre-reqs
    recipe

и

lab_target:CC=gcc4
lab_target: lab_pre_reqs
    recipe

Переменная CC, похоже, не используется при выполнении предварительных требований, для которых я нашел объяснение. Но я не вижу, как этого добиться.

Заранее спасибо

Collins

Подробнее ...

TESTSUBDIRS = dir1 dir1 / тестирование dir2 dir2 / тестирование

.PHONY: testsubdirs $ (TESTSUBDIRS)

testsubdirs: $ (TESTSUBDIRS)

$ (TESTSUBDIRS): objdir
$ (MAKE) -e -C $ @

objdir: $ (CSPLATFORMDIR) / makebuilddir
$ (CSPLATFORMDIR) / makebuilddir $ (BUILDDIR)

LAB4DIRS = dir1 dir2
.PHONY: t100lab4dirs $ (LAB4DIRS)

lab4dirs: $ (LAB4DIRS)

$ (T100LAB4SDIRS): objdir
$ (MAKE) -e -C $ @

gtest: CC = g ++
gtest: $ (CSPLATFORMDIR) / makebuilddir $ (TESTSUBDIRS)
$ (CSPLATFORMDIR) / makebuilddir $ (BUILDDIR)
$ (AR) -r $ (TARGET) $ (OBJS)
ls -l $ (TARGET)
g ++ -I $ (BUILDDIR) / .. -I $ (BUILDDIR) ../../ inc -I $ (GTESTINC) $ (BUILDDIR) / *. o -lpthread $ (GTESTDIR) /make/gtest_main.a - o $ (BUILDDIR) / gtest

lab_target.a: CC = gcc4
lab_target.a: $ (CSPLATFORMDIR) / makebuilddir $ (T100LAB4DIRS)
$ (CSPLATFORMDIR) / makebuilddir $ (BUILDDIR)
$ (AR) -r $ (TARGET) $ (OBJS)
ls -l $ (TARGET)

1 Ответ

0 голосов
/ 16 февраля 2011

Вы можете использовать GNU make if для задания переменных, но не на основе целей. Обычно это решается с помощью цели, которая должна использовать C ++ для использования $(CXX) в качестве компилятора, а цели, которые должны использовать C, используют $(CC). Затем установите эти отдельные переменные соответствующим образом. Я думаю, что это также лучший способ.

...