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

2023-12-03

前言:我正在尝试将我的 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 时找到为这些项目计划的 GUIDes,并相应地编辑 csproj 文件。

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

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

...但我似乎找不到等效的吸气剂。我尝试过这样的事情:

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 命令期间填充。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在 cmake 时获取 CMake 为特定 vcproj 生成的 GUID 吗? 的相关文章

  • 如何使用 --build 选项查看 cmake 发出的命令

    当我运行 cmake build target INSTALL 命令时 如何查看发出的命令 似乎没有像 versbose之类的选项 cmake 帮助说 cmake build 是底层构建工具的接口 但没有说明有关发出的命令转储的任何内容 我
  • 在 Ubuntu 16.04 上编译 PCL 1.7,CMake 生成的 Makefile 中出现错误

    我正在尝试让 PCL 1 7 点云库 而不是其他 pcl 在 Ubuntu 16 04 上运行 我最终希望用于 C 的东西 但现在我只是想让这些例子工作 我使用的是 Ubuntu GNU 5 3 1 附带的默认编译器和 Cmake 版本 3
  • 如何将 gnatmake/gnatbind/gnatlink 集成到 C/Ada 代码的 CMake 文件中?

    我用几种语言 C C Fortran77 Fortran90 编写了代码 并且可以使用 CMake 编译它 没有任何问题 效果很完美 现在 我想在用 C 编写的 main 中添加一些 Ada 函数 并且我想通过 CMake 编译它 鉴于我无
  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • Wix 为整个树生成单个组件 id

    我是一个几乎没有 wix 经验的人 我正在努力支持 Windows 以及我负责的组件 我正在尝试为我的产品生成的一组文件创建合并模块 这些文件存在于许多子目录中 我想知道如何为整个树中的所有文件创建一个组件 ID 我不担心小的升级 因为那是
  • 如何在使用 Cmake 构建期间编译 HLSL 着色器?

    我正在开发 d3d 应用程序 我想在使用 cmake 构建期间编译我的 hlsl 着色器 我不知道从哪里开始 这是我当前的 CMakeLists txt cmake minimum required VERSION 3 20 project
  • CMake“无法运行 MSBUILD.exe”命令错误

    当我想为 opencv 3 3 0 创建 Visual Studio 15 2017 make 文件时 它给了我以下错误消息 error in configuration process project files maybe invali
  • Clang 与 CLion:无法获取编译器信息

    我尝试通过更改在 CLion 中从 gcc 切换到 clang工具链偏爱 但现在 cmake 失败并显示以下内容 Cannot get compiler information Compiler exited with error code
  • 将 dll/lib 链接到 cmake 项目

    我试图将库链接到我的 cmake 项目 但遇到链接器错误 我花了 2 个小时尝试解决这个问题 并创建了一个简单的项目 在其中对所有路径进行了硬编码 CMAKE MINIMUM REQUIRED VERSION 3 0 PROJECT Tes
  • 如何将最新的 Windows SDK 版本传递给 CMake?

    如何将最新的 Windows SDK 版本传递给 CMake 这样我就不需要进入 Visual Studio 并从配置属性 常规中手动放置它 我在互联网上搜索 找到了 CMAKE SYSTEM VERSION 变量 并且尝试使用 set C
  • 使用 CMake 在 iOS 中使用另一个 STATIC 库创建一个 STATIC 库

    我有一个 libfooi a 的集合 libfoo1 a libfoo2 a libfoo3 a 使用工厂 带有静态代码 有一个公共接口来创建 C 对象 使用 CMake 我选择其中之一 并创建一个链接它并添加所有内容的 libfooWra
  • 如何使用cmake查找库?

    要将可执行文件与驻留在标准位置的库链接 可以在 CmakeLists txt 文件中执行以下操作 create executable generate mesh generate mesh cpp target link libraries
  • 存储 MySQL GUID/UUID

    这是我能想到的将 UUID 生成的 MySQL GUID UUID 转换为二进制文件 16 的最佳方法 UNHEX REPLACE UUID 然后将其存储在 BINARY 16 中 我应该知道这样做有什么影响吗 从 MySQL 8 0 及以
  • 如何最好地为 Visual Studio 2017 构建的 CMake C++ 项目设置输出目录?

    我使用 Visual Studio 2017 使用 vcxproj 文件构建 C 桌面项目 我喜欢默认行为 其中输出目录是项目下面的子目录 例如 myproj sln myproj vcxproj x64 myproj release my
  • 使用cmake交叉编译gRPC

    我正在尝试使用 cmake 交叉编译 gRPC 我实际上做到了 不幸的是 我的方法涉及在 CMakeLists txt 内部进行修改 问题是 当我尝试编译 gRPC 时 它使用的是他刚刚编译的 protobuffer 它无法在 x86 计算
  • Clion如何将文件添加到项目中

    这看起来真的很基本 如何将文件添加到项目中而无需手动编辑CMakeLists txt 例如另一个目录中的源文件 CLion 解析CMakeLists txt并使用它生成项目视图 但我相信将文件添加到项目的唯一方法是编辑CMakeLists
  • CMake:如何更改单个目标的编译器

    我有使用交叉编译器的嵌入式项目 我想介绍一下Google测试 用原生GCC编译器编译 另外使用 CTC 编译器构建一些单元测试目标 Briefly 我有 3 个不同的目标并用 3 个不同的编译器编译它们 如何表达它CMakeLists tx
  • Opencv - 找不到头文件

    我正在尝试使用 opencv 开始开发 问题是 到目前为止我几乎无法设置 opencv 因为我找不到它的头文件 我对此主题进行了一些研究 但没有一个真正有帮助 下面是一些链接 opencv2 包含文件在哪里 https stackoverf
  • 如何在cmake中静态链接到glibc

    我正在尝试从 Fedora 构建一个可以在 RedHat 6 机器上运行的包 所以我需要构建和静态链接一些RedHat机器中不存在的库 我发现我可以你 static libgcc or static libstdc 与标准库的静态版本链接
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的

随机推荐

  • MySQL:从查询中获取列名或别名

    我不是要求SHOW COLUMNS命令 我想创建一个与 heidisql 类似的应用程序 您可以在其中指定 SQL 查询 并在执行时返回一个结果集 其中包含表示查询结果的行和列 结果集中的列名称应与 SQL 查询中定义的所选列匹配 在我的P
  • 如何使用 jQuery 在单击时显示 div,隐藏其他 div?

    我想在我的页面上有一个文本区域 显示一个 div 并隐藏其他 div 假设有 8 个其他 div 单击时 我希望显示所选的 div 并隐藏当前的 div 和其他 div 有一个简单的解决方案吗 可以构建 显示当前单击的 div 隐藏先前单击
  • IE8 上的 YUI:参数在 dom-style.js 上无效

    我已经到处问过这个问题 但仍然没有得到任何反馈 这让我抓狂 我们在正在使用的门户网站 Liferay 6 2 上使用了一些 Alloy UI 小部件 并且在除 IE8 之外的所有浏览器中一切正常 由于某种原因 我收到一条错误消息 涉及有关
  • Python TypeError:传递给对象的非空格式字符串.__format__

    我最近遇到了这个 TypeError 异常 我发现它很难调试 我最终将其简化为这个小测试用例 gt gt gt 20 format b hi Traceback most recent call last File
  • 无法在 VS Code 上启动 Jupyter 笔记本

    在 64 位 Windows10 上使用最新的 miniconda VS Code 全新安装 VS Code 后 我无法再从其中启动 jupyter 笔记本 当我第一次尝试创建新的 jupyter 文件时 安装了 Python 扩展ipyk
  • JavaFX 打开新窗口

    看着这段代码他们展示了一种在登录后显示新窗口的方法 当用户名和密码正确时 它将打开新对话框 我想要单击按钮打开新对话框 而不检查用户名和密码 如果您只想要一个按钮来打开一个新窗口 那么可以使用以下方法 btnOpenNewWindow se
  • MongoDb 对日期范围的唯一约束

    我将 MongoDb 与 Mongoskin 一起使用 在集合中我正在保存事件 在其他字段中 这些事件有开始和结束 保存为Dates在 Mongodb 中 events start Date1 end Date2 在此集合中插入新文档时 我
  • 递归ftp下载,然后解压gz文件

    我有一个多步骤文件下载过程 我想在 R 中执行 我已经完成了中间步骤 但没有第一步和第三步 STEP 1 Recursively find all the files at an ftp site ftp prism oregonstate
  • 非时间数据的 R 运行平均值

    This is the plot I m having now 它是从这段代码生成的 ggplot data1 aes x POS y DIFF colour GT geom point facet grid CHROM scales fr
  • Tkinter - 尽管保留全局引用,但图像不会显示在按钮上

    我想在右上角放置一个按钮 并让该按钮成为图像 我了解范围 垃圾收集等 并且已经看到这里提出的所有其他问题都忽略了这一事实 但是 我尝试了多种方法 包括创建self photo并将照片声明为全局变量 实际上 我什至不相信这就是问题所在 因为我
  • 删除脚本 SQL Server 2008

    这是我正在尝试解决的情况 我有一个充满重复项的表 发生这种情况是因为相似的行是从两个不同的源加载的 这是在包中得到处理的 但我想删除那些重复的行 这里没有关键属性 我不能使用无PK 他们俩sources是克利夫兰城和俄亥俄州立大学 我有一列
  • .NET Framework 4.5 目录在哪里?

    我已经安装了 Windows 8 Visual Studio 2012 但没有 v4 5 目录 WINDIR Microsoft NET Framework 我是否做错了什么 或者 NET 4 5 与其他版本不同 如果是因为我没有安装工具
  • 分配给 $null 的对象属性不会测试 $null 的 true

    我已经开始使用 PowerShell 来完成一些事情并使用变量 null在 PowerShell 中 我在分配变量时遇到了问题 null对于类中定义的变量 测试返回false not true 示例代码 class test string
  • 无法弄清楚如何将我的非 MVC 站点从 sitemap.xml 路由到另一个 .aspx 页面

    当搜索 google 时 唯一的解决方案出现在 MVC 网站上 我的 asp net 4 0 站点不是 MVC 我希望请求 sitemap xml 加载另一个动态 aspx 页面 以便我可以动态生成 google 的链接 我花了几个小时搜索
  • 脚本语言如何使用套接字?

    Python Perl 和 PHP 全部支持TCP 流套接字 但是 假设我只有 FTP 访问权限而没有机器的 root 访问权限 那么如何在 Web 服务器 例如 Apache 运行的脚本文件中使用套接字呢 当客户端连接到特定端口时 如何调
  • Common Lisp 的复制树:哪些对象将被原始对象和副本共同引用?

    我正在阅读实用 Common Lisp 并且有一个关于 Lisp 的问题COPY TREE功能 书上给出了调用的例子 copy tree 1 2 3 4 5 6 书上解释完之后 是这么说的 如果原始内容中的 cons 单元格引用了原子值 则
  • window.focus() 在 Google Chrome 中不起作用

    只是想知道 Google Chrome 是否会支持window focus 在某一点 当我说支持时 我的意思是让它发挥作用 对它的调用不会失败 它只是不执行任何操作 所有其他主流浏览器都不存在此问题 FireFox IE6 IE8 和 Sa
  • 如何检查字符串是否是唯一标识符?

    uniqueidentifier SQL Server 是否有与 IsDate 或 IsNumeric 等效的函数 或者有什么相当于 C TryParse 的东西吗 否则我将不得不编写自己的函数 但我想确保我没有重新发明轮子 我试图涵盖的场
  • 如何按修改日期列出 Amazon S3 存储桶内容?

    大多数时候 我们会将文件加载到公共 S3 存储桶中 因此很难找出其中的数据 如何查看在特定日期上传的对象 一种解决方案可能会使用s3api 如果您的对象少于 1000 个 那么它很容易工作 否则您需要使用分页 s3api可以列出所有对象并具
  • 我可以在 cmake 时获取 CMake 为特定 vcproj 生成的 GUID 吗?

    前言 我正在尝试将我的 C csproj 与我们的 C 和 C CLI 代码库 cmake 构建的其余部分集成 我收到了反对尝试这样做的建议 因为 CMake 不能与 Visual Studio 中的 NET 很好地协作 但在实现一些自定义