我使用适用于Windows的intel C ++编译器编译了程序(来自Intel Composer 2011),并收到一条错误消息,提示找不到libmmdd.lib。我用谷歌搜索了这个问题,有人说我必须重新安装编译器,然后我做了。但是,这并不能解决问题,因此我开始在intel编译器目录中查找,发现此文件(以及其他必需的库)位于

%CompilerDirectory%\ compiler \ lib \ ia32

在make文件中写入库的整个绝对路径没有任何意义,因此我开始搜索,但我只能发现%mklroot%指向数学内核目录。即使使用-L%mklroot%/ .. / compiler / lib / ia32进行链接的方法,我也无法正确链接至库,所以最终我还是a脚地解决了这个问题,也就是说,我复制了每个文件链接器请求到源目录,因此该问题暂时得以解决。

由于解决问题的方法不是最好的方法,所以我想知道是否存在一种无需复制文件即可链接到这些库的方法。这很奇怪,因为编译器应该单独找到自己的库,但是……我不知道……!

有任何想法吗?是否有%compilerroot%之类的东西指向编译器目录,并且我可以将其放入makefile(或实际上是我的qmake,因为我正在使用Qt)。

感谢您的付出:-)

最佳答案

代替使用%mklroot%尝试$$(mklroot)$(mklroot)

您可以找到说明here


  变量可用于存储环境变量的内容。
  这些可以在运行qmake时进行评估,或包含在其中
  生成项目时生成的Makefile进行评估。
  
  要在运行qmakeis时获取环境值的内容,请使用
  $$(...)运算符:
  
  DESTDIR = $$(PWD)
   消息(该项目将安装在$$ DESTDIR中)
  
  在上面的分配中,PWD环境变量的值为
  在处理项目文件时读取。
  
  为了获得环境值的内容,当
  生成的Makefile已处理,请使用$(...)运算符:
  
  DESTDIR = $$(PWD)
  消息(该项目将安装在$$ DESTDIR中)
  
  DESTDIR = $(PWD)
   消息(该项目将以PWD的值安装)
   消息(处理Makefile时。)
  
  在上述分配中,当
  项目文件已处理,但$(PWD)已分配给DESTDIR
  生成的Makefile。这使得构建过程更加灵活
  因为当Makefile是
  处理。


编辑:
奇怪的是,$$(mklroot)和$(mklroot)都没有给您期望的结果。我做了一个简单的测试,以验证我上面写的内容:


打开命令提示符
用测试值创建了一个新的环境变量“ mklroot”:set mklroot=C:\intel_libs
验证了previos步骤的结果:echo %mklroot%。我得到了C:\intel_libs
将您的3个qmake函数放在.pro文件的末尾:
警告($(%MKLROOT%))
警告($(MKLROOT))
警告($$(MKLROOT))
冉qmake:qmake。结果:
Project WARNING:
Project WARNING: c:\intel_libs
Project WARNING: c:\intel_libs


如您所见,第二和第三警告()显示了我设置为环境变量的字符串。

10-01 10:04