Ярлык для каталога компилятора Intel для использования в makefile - PullRequest
1 голос
/ 27 марта 2012

Я скомпилировал свою программу с помощью компилятора Intel C ++ для Windows (из Intel Composer 2011) и получил сообщение об ошибке, что libmmdd.lib не может быть найден. Я погуглил эту проблему, и некоторые люди сказали, что я должен переустановить свой компилятор, и я сделал; однако, это не решило проблему, поэтому я начал искать в каталоге компилятора intel и обнаружил, что этот файл (и другие необходимые библиотеки) расположены по адресу

% CompilerDirectory% \ компилятор \ Lib \ ia32

Нет смысла записывать в файл make полный абсолютный путь к библиотекам, поэтому я начал поиск, и я смог только обнаружить, что% mklroot% указывает на каталог математического ядра. И даже при использовании -L% mklroot% / .. / compiler / lib / ia32 подхода для компоновки я не смог правильно связать библиотеки, поэтому в итоге я сделал неудачный шаг, чтобы решить проблему, то есть скопировал каждый файл компоновщик запрашивает исходный каталог, и поэтому проблема была временно решена.

Поскольку этот способ решения проблемы не самый лучший, мне интересно, есть ли способ ссылаться на эти библиотеки без необходимости копировать файлы. Это странно, потому что компилятор должен сам находить свои библиотеки, но ... я не знаю ...!

Есть идеи? есть ли что-то вроде% compilerroot%, которое указывает на каталог компилятора и которое я могу поместить в свой make-файл (или фактически в мой qmake, поскольку я использую Qt).

Спасибо за любые усилия: -)

1 Ответ

0 голосов
/ 29 марта 2012

Вместо использования %mklroot% попробуйте $$(mklroot) или $(mklroot).

Вы можете найти объяснение здесь :

Переменные могут использоваться для хранения содержимого переменных среды. Они могут быть оценены во время запуска qmake или включены в сгенерированный Makefile для оценки при сборке проекта.

Чтобы получить содержимое значения среды при запуске qmakeis, используйте оператор $$ (...):

DESTDIR = $$ (PWD)
сообщение (проект будет установлен в $$ DESTDIR)

В приведенном выше присваивании значение переменной среды PWD равно читать при обработке файла проекта.

Для получения содержимого значения среды в то время, когда сгенерированный Makefile обработан, используйте оператор $ (...):

DESTDIR = $$ (PWD)
сообщение (проект будет установлен в $$ DESTDIR)

DESTDIR = $ (PWD)
сообщение (проект будет установлен в значение PWD)
сообщение (при обработке Makefile.)

В приведенном выше назначении значение PWD считывается сразу же, когда файл проекта обрабатывается, но $ (PWD) назначается DESTDIR в сгенерированный Makefile. Это делает процесс сборки более гибким, пока как переменная окружения установлена ​​правильно, когда Makefile обрабатывается.

EDIT:
Странно, что ни $$ (mklroot), ни $ (mklroot) не дали ожидаемого результата. Я сделал простой тест, чтобы проверить, что я написал выше:

  1. Открыл командную строку
  2. Создана новая переменная среды 'mklroot' со значением теста: set mklroot=C:\intel_libs
  3. Проверен результат предыдущего шага: echo %mklroot%. Я получил C:\intel_libs
  4. Поместил ваши 3 функции qmake в конец моего .pro-файла:
    предупреждение ($ (% MKLROOT%))
    предупреждение ($ (MKLROOT))
    предупреждение ($$ (MKLROOT))
  5. Ран qmake: qmake. Результат:
    Project WARNING:
    Project WARNING: c:\intel_libs
    Project WARNING: c:\intel_libs

Как видите, во 2-м и 3-м предупреждениях () отображается строка, которую я установил для переменной среды.

...