在Visual C ++中包含间接

时间:2009-01-26 12:43:28

标签: c++ include indirection

假设我们有一个需要Boost编译的应用程序。 Boost是一个外部库,定期更新,我们的应用程序有多个二进制文件和多个版本(“multiple”,如“让他们成长和繁殖”......不要问...... ),我们需要一个易于更新/维护的间接,以便为每个应用程序的版本链接提供正确的Boost版本。

例如:

  • MyApp 8.0 =>提升1.34
  • MyApp 8.1 =>提升1.35
  • MyApp 9.0 =>提升1.35
  • MyApp 10.0 =>提升1.37

在Linux文件系统上,我们将创建一个重定向到右侧boost目录的符号链接:

  • MyApp 8.0 => MyAppBoostLink_8.0 =>提升1.34
  • MyApp 8.1 => MyAppBoostLink_8.1 =>提升1.35
  • MyApp 9.0 => MyAppBoostLink_9.0 =>提升1.35
  • MyApp 10.0 => MyAppBoostLink_10.0 =>提升1.37

这将使我们能够轻松更新MyApp 10.0,以便在它可用时与Boost 1.38链接,只需更换符号链接即可。

但在Windows上,这不起作用(或者我错过了一些东西)。

Boost本身似乎放弃了这个想法:有了BJam,我记得看到警告称BJam正在复制lib文件,因为符号链接在WinNT上不起作用。我尝试了另一种选择,因为我们使用Visual C ++,但没有编译指示解决了这个问题(我搜索了一个pragma添加默认搜索目录的头包含和库链接,但没有找到)。

我无法相信我需要启动一个脚本来检出VCPROJs文件(Visual C ++ XML makefile),更新Boost包含,然后检入修改,但我看不到其他解决方案直到Windows有工作的符号链接(或者我发现如何创建它们)。

有更好的主意吗?

修改

当我们更新编译器时,从Visual C ++ 2003到Visual C ++ 2008,问题就消失了。显然,Visual C ++ 2008看到了跨网络的符号链接。

2 个答案:

答案 0 :(得分:3)

在NTFS文件系统上等效的Windows符号链接称为联结:http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx

答案 1 :(得分:2)

您可以将boost安装的基本目录保存在特定于版本的环境变量中,该变量在VS2008的“启动程序批处理文件”中设置。这可能不像在构建过程中操作.vcproj文件那样难看。大概...