gpt4 book ai didi

cmake - 我可以在 cmake 时获取 CMake 为特定 vcproj 生成的 GUID 吗?

转载 作者:行者123 更新时间:2023-12-02 04:06:55 25 4
gpt4 key购买 nike

序言:我正在尝试将我的 C# csproj 与我们的 C++ 和 C++/CLI 代码库 cmake 构建的其余部分集成。我收到了反对尝试这样做的建议,因为 CMake 与 Visual Studio 中的 .NET 不能很好地协作,但在实现一些自定义之后,我觉得我已经非常接近了。

我的自定义部分是使用configure_file命令在CMake时编辑csproj文件,根据正在发生的构建类型(例如x86、x64)对其进行自定义。

问题是我使用一些 ProjectReference 标签来引用 C++/CLI 项目:

<ProjectReference Include="..\..\WrapperProject\WrapperProject.vcproj">
<Project>{7BD6E175-CDD1-4F8D-A3B2-0AC862E62C03}</Project>
<Name>WrapperProject</Name>
</ProjectReference>

...并且 GUID 不能保持静态,因为每当重建 CMake 缓存时,它们都会针对项目发生变化(如果我弄错了,请纠正我)。

所以我想做的是在 CMake 时找到为这些项目计划的 GUID,并相应地编辑 vcproj 文件。

Google 告诉我,人们可以使用“set_property”来设置 GUID,如下所示:

set_property(CACHE ${target_name}_GUID_CMAKE PROPERTY VALUE ${MY_GUID} )

...但我似乎找不到等效的 setter/getter 。我尝试过这样的事情:

get_property(WRAPPER_GUID 缓存内部属性 WrapperTargetName_GUID_CMAKE)

...没有运气。感谢您的帮助!

最佳答案

经过更多尝试后,我意识到 Fraser 指出的 - 这种方法并不总是有效,因为我不能指望 GUID 在新运行的 CMake 上可用。因此,我采用了 CMake 邮件列表中建议的路线,即自己显式设置 GUID 值。

因此,在每个 C++/CLI 包装器项目的 CMakeLists.txt 中,我有这样的内容:

# Set a global cache variable for this project GUID
# The TestAppNet csproj needs this GUID to properly reference this project
set_property(GLOBAL PROPERTY Wrapper_GUID "1897F4D1-E929-444E-9343-00F094113772")
get_property(projectGUID GLOBAL PROPERTY Wrapper_GUID)
MESSAGE( STATUS "Setting project GUID to: ${projectGUID}")
set(Wrapper_GUID_CMAKE "${projectGUID}" CACHE INTERNAL "Project GUID")

在 C# 项目 CMakeLists.txt 中,我有以下内容:

get_property(CMAKE_WRAPPER_GUID GLOBAL PROPERTY Wrapper_GUID)
MESSAGE( STATUS "Setting Wrapper GUID to: ${CMAKE_WRAPPER_GUID}" )

...然后 CMAKE_WRAPPER_GUID 用作 .csproj 文件中的变量,该文件在 configure_file 命令期间填充。

我不确定这是否有效,但它似乎有效!

关于cmake - 我可以在 cmake 时获取 CMake 为特定 vcproj 生成的 GUID 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15415007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com