2013-04-21 1 views
1

Я пытаюсь скомпилировать одну библиотеку (xcrysden, на основе файла Make), которая во время компиляции выполняет ./configure внешних зависимостей - Tk и Tcl 8.5 - и скомпилирует их.Передача CC/CFLAGS/LDFLAGS из Makefile в ./configure из Tk/Tcl

Таким образом, структура примерно так:

Основной Makefile:

... 
cd external/src; make; 

внешних зависимостей (предварительно) Makefile (Тк):

include ../Make.sys 
cd /unix 
./configure 
make 
make install 

Make.sys включен по внешнему make-файлу:

... 
CFLAGS =... 
CC  =... 

Конфигурация, очевидно, создает еще один make-файл в /external/src/unix, который будет использоваться Tk. В Tk документации написано:

If you wish to specify a particular compiler, set the CC environment variable before calling configure. You can also specify CFLAGS prior to configure and they will be used during compilation.

Но из полученного Makefile я определенно вижу, что ни определено компилятор (CC), ни флаги (CFLAGS) используются. Означает ли это «переменная среды», когда она задана в другом файле make?

У меня на самом деле проблемы с компиляцией Tk, поэтому я пытаюсь передать не только компилятор, но и ссылку на информацию LDFLAGS = -L/opt/local/lib -lfontconfig. Я хочу сделать это аккуратным способом (то есть модифицировать только Make.sys библиотеки, зависящей от Tk). Но тогда я сталкиваюсь с проблемой, что не только не знаю, как передать LDFLAGS в Tk configure, но даже CC/CFLAGS не существует. Я не уверен, что это специфично для конкретной библиотеки (Tk) с использованием ./configure или я неправильно понимаю общее использование ./configure.

p/s/i компилируется на OS-X с использованием компиляторов gnu.

+0

Являются ли эти переменные 'экспортом '? –

+0

нет, это не так. Просто определено как написано. – Denis

ответ

1

Проблема в том, что переменные, которые вы определяете в ../Make.sys, в настоящее время являются локальными для оболочки, которая обрабатывает include; configure и make выполняются в подпроцессах и не обнаруживают, что у вас есть какие-либо предпочтения. , Что нужно сделать, это добавить:

export CFLAGS CC 

между include и призыв к ./configure.

Вы также можете положить его внутри Make.sys или вызвать configure как CFLAGS=$CFLAGS CC=$CC ./configure. Вы, вероятно, не должны устанавливать значения непосредственно в вызове make; установка компилятора может означать, что необходимы и другие другие флаги.

+0

спасибо, заработал с ./configure CFLAGS = $ CFLAGS CC = $ CC ... – Denis