【发布时间】:2015-09-07 23:46:56
【问题描述】:
我有一个 C++/MFC 应用程序,我正在尝试使其更便携,以便为跨平台转换为 wxWidgets 之类的东西做准备。
我的第一步是识别它的所有编译器和链接器依赖项,例如 CRT 库、Windows SDK 和 MFC,并将它们一起收集在与项目相同的文件存储中,以便整个包独立于可能因一台计算机而异的任何特定工作环境(WinSDK 版本等)。
对于编译器依赖项,这相对容易。通过使用 (/X) 选项
项目 > 属性 > C/C++ > 预处理器 > 忽略标准包含路径
我能够将项目从定义的默认包含文件夹中分离
工具 > 选项 > 项目和解决方案 > VC++ 目录
这当然会产生大量编译错误,并且通过将所有这些必需的库传输到我的文件存储并手动将它们的新路径添加到
项目 > 属性 > C/C++ > 常规 > 附加包含目录
我能够确保我拥有我自己的项目的编译器所依赖的所有内容的副本。
但是,对于链接器来说,这并不容易。虽然它确实有选项
项目>属性>链接器>常规>附加库目录
对于添加自定义依赖项,我找不到让链接器忽略标准库路径以帮助我识别这些依赖项的方法。
我只能找到
项目>属性>链接器>输入>忽略所有默认库
但这根本不是一回事。它只会导致链接器忽略标头中指定应链接到哪个库 files 的编译指示,但保留标准库路径供链接器搜索。
最后,我不得不回去
工具 > 选项 > 项目和解决方案 > VC++ 目录
并删除所有“库文件”目录,以确保我不会无意中忽略依赖项。这当然让 VS2008 现在无法构建其他项目,而我并没有尝试实现相同类型的依赖隔离。
编译器有这个有用的覆盖开关 (/X) 来禁用标准环境路径似乎很奇怪,但链接器没有。
有人能解释一下吗?还是我错过了什么?
【问题讨论】:
标签: visual-studio visual-c++ visual-studio-2008 linker