访问注册表数据以设置链接器和包含路径
Access the registry data to set the linker and include paths
我正在VS2102中编写一个C++程序,使用一些给定的库和其他软件的头文件,这些软件将这些文件作为API提供(位于"软件安装文件夹"+\include\lib\x86或\include\lib \x64中)。
现在,我想确保即使安装路径不同,我的程序也能工作,所以我需要从注册表中提取安装路径,并动态更改包含路径链接器设置。这可能吗?
编辑我正在将程序编译到dll中,以便稍后在C#项目中使用。是否可以将安装路径(以及链接器和包含项目设置)设置为全局变量,将程序编译为dll(使用现有的有效设置),然后在通过dllimport
首次加载dll之前由外部程序重置此变量?
MSBuild提供了一种语法,用于从VS2012的此处链接和此处直接链接的注册表中读取值(并初始化生成属性)。
您可以使用以下语法读取系统注册表值,其中Hive是注册表配置单元(例如
HKEY_LOCAL_MACHINE
),Key为注册表项名称,SubKeyalue为子注册表项的值。$(registry:HiveMyKeyMySubKey@Value)
要获得默认的子键值,请省略值。
$(registry:HiveMyKeyMySubKey)
此注册表值可用于初始化生成属性。例如,要创建表示Visual Studio web浏览器主页的构建属性,请使用以下代码:
<PropertyGroup> <VisualStudioWebBrowserHomePage> $(registry:HKEY_CURRENT_USERSoftwareMicrosoftVisualStudio11.0WebBrowser@HomePage) </VisualStudioWebBrowserHomePage> <PropertyGroup>
读取后,您可以在项目的附加include和库路径中使用build属性。
例如,它可能看起来像;
<PropertyGroup>
<ThirdPartySoftware_1>
$(registry:HKEY_CURRENT_USERSoftwareThirdPartySW_1@InstalledLocation
</ThirdPartySoftware_1>
</PropertyGroup>
并添加到项目文件中,或通过.props文件包含。
根据您的编辑构建需求与运行时需求不同。通过确保路径中有正确的文件夹,可以解决运行时加载问题;或者更可能的情况是,为目标平台分发正确的dll。
作为替代方案,您也可以将其作为环境设置任务(或与第三方软件相关的安装后任务)。
位于软件安装文件夹+
includelibx86
或includelibx64
中
将第三方软件的安装路径设置为";软件安装文件夹";根据需要。例如(在系统环境变量中);
ThirdPartySoftware_1 = "software installation folder";
一旦完成,就可以在IDE中使用它来添加到include路径中;
$(ThirdPartySoftware_1)include
和图书馆路径;
$(ThirdPartySoftware_1)includelib$(Platform)
以上假设$(Platform)
变量是x86
或x64
。有时向导会为x86
生成一个Win32
平台。
- 如何使用cppcheck处理半相对包含路径
- 如何确定包含路径的来源?
- 生成文件缺少包含路径 尽管路径存在并已定义
- 更改包含路径
- 在 Android Studio 中添加 C/C++ 的包含路径
- 如何设置 CMake 来构建包含路径包含的代码,如 #include < libdir/lib>?
- 在Visual Studio Code(.json配置)中设置相对于工作区路径的c / c ++项目的包含路径
- 如何在 pybind11 项目中设置包含路径
- CLion 不索引任何外部包含路径
- VS代码无法识别包含路径
- 使用相对标头包含路径重新分析 ASTUnit 失败
- 如何在忍者上添加包含路径,并为VS 2019添加叮当
- 使用 glibc 2.7 包含路径编译失败
- 通过程序代码行设置C++包含路径
- Visual Studio添加真正"global"默认包含路径
- target_include_directories生成的包含路径
- C++'Undefined reference to'错误,尽管包含路径中的头文件中存在函数定义
- 如何从 qmake 中的包含路径中删除项目的根目录
- 是什么让 clang 在包含路径的子目录中看起来?
- 如果库的包含路径设置不符合预期,如何引发编译错误