有关如何部署 C++ 代码以在任何地方工作的提示

2024-04-22

我不是在谈论制作可移植代码。这更多的是一个分配问题。我有一个中型项目。它对常用库有几个依赖项(例如 openssl、zlib 等)。它在我的机器上编译得很好,现在是时候将它呈现给世界了。

本质上是构建最好的工程。我想制作适用于 Windows、Linux、MacOSX 等的安装程序。我想制作一个可下载的 tar 球,使代码能够与./configure and a make(可能通过 autoconf)。如果有一个 make 选项可以构建安装程序,那将是锦上添花……甚至可以交叉编译,以便可以在 Linux 中构建 Windows 安装程序。

最好的策略是什么?我可以在哪里花费最多的时间?主要焦点应该是 autoconf 还是有其他可以提供帮助的工具?


我会推荐CMake http://cmake.org。优点:

  • 它非常易于使用静态库、动态库、可执行文件及其依赖项构建简单和复杂的项目。
  • 它是独立于平台的,并为大多数编译器和 IDE 生成 makefile 和/或 ide 项目文件。
  • 它抽象了windows和unix之间的差异,例如“libShared.so”和“Shared.dll”被称为“Shared”(cmake处理每个平台的名称差异),如果Shared是您项目的一部分,它会整理出如果不是,则假定它位于链接器路径中。
  • 它会调查用户系统中所需的编译器和第三方库,然后您可以选择在第三方库不可用时删除组件或显示错误消息(它附带宏来查找最常见的第三方库)。
  • 它可以从命令行运行,也可以使用简单的 GUI 运行,使用户能够更改上面发现的任何参数(例如编译器或第 3 方库的版本)。
  • 它支持用于自动化常见步骤的宏。
  • 有一个名为 CPack 的组件,可以让您创建安装程序,我认为这只是一个make install命令行的东西(我没用过)。
  • CTest 组件与其他单元测试库集成,例如 boost test 或 google test。

我现在使用 CMake 处理所有事情,甚至使用 Visual Studio 进行简单的测试项目。

我从未使用过 autotools,但很多其他用户评论说 cmake 更容易使用。由于这个原因,KDE 项目从 autotools 迁移到了 cmake。

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

有关如何部署 C++ 代码以在任何地方工作的提示 的相关文章

  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 按成员序列化

    我已经实现了template
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现

随机推荐

  • 如何访问 nvd3 中 d3 图的 x 和 y 比例?

    我正在使用 nvd3 绘制一些系列 并想向图中添加一些任意矩形 如何访问 d3 图的底层 x 和 y 比例 以便将矩形坐标转换为 svg 像素坐标 以便与现有数据的比例相同 function d3 render response nv ad
  • 在 IE 中使用 html 音频:MEDIA12899:音频/视频:未知的 MIME 类型

    html如下
  • mysql中可以使用if语句吗?

    我正在尝试创建一个查询 该查询将生成取决于价格的总使用量 我不知道这是否可以在查询中实现 所以就在这里 主表 这个表是所有人的 所以这个是连续的 这个可以添加 ID列是唯一的 id price date created 25 8 5 201
  • PHP CodeSniffer 有多有用?代码标准的总体执行情况? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从 android 连接到 PrestaShop Web 服务时出现 401 错误

    我试图在 PrestaShop 中调用 Web 服务 但收到 401 未授权错误 即使我已经通过了用户名密钥 我也尝试了身份验证器 但收到错误 HttpRetryingError 在下面找到我所做的代码片段 方法一 final String
  • 将 SSL 连接到子域 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我已为我的主域分配了 SSL 我想知道是否可以将 SSL 用于我的子域 我坦白地尝试了一下 但它显示警告页面 说该页面不安全等等 有没有解决方案 以便
  • 如何使用故事板通过自定义图像设置 iPhone 选项卡栏图标

    我是 iphone 开发的新手 我需要在标签栏中放置一个自定义图像图标 但它只显示默认颜色 黑色和蓝色 帮助我克服这个错误朋友 在应用程序中添加图像 并参见附图
  • 如何在hadoop/map reduce中创建固定行数的输出文件?

    假设我们有 N 个具有不同行数的输入文件 我们需要生成输出文件 使得每个输出文件恰好有 K 行 最后一个输出文件可以有 是否可以使用单个 MR 作业来完成此操作 我们应该打开文件以便在reducer中显式写入 输出中的记录应该被打乱 tha
  • 父子表记录-构建SQL查询

    这是我的表格和这些表格的数据 表名 Code CID Code 1 abc 2 def 3 xyz 表名 Details ID Name CID 1 a 1 2 b 2 结果表 ID Code Name 1 abc a 2 abc Null
  • 数据库中的额外查询或额外列哪个更好?

    对于可用时间非常短的数据来说 额外的查询或数据库中的额外列更好 示例 在子用户管理的情况下 我在主用户 表中添加一列额外的 super user id 并在用户类型为 sub user 且默认列值为 1 时进行输入 或者我创建新表并管理该表
  • 您如何处理标准库的signed char -> int 问题?

    这是我工作中一个长期存在的问题 我意识到我still没有好的解决办法 C 天真地为 int 定义了它的所有字符测试函数 int isspace int ch 但是字符通常是带符号的 并且完整的字符通常不适合 int 或用于字符串的任何单个存
  • 如何渲染响应?

    我正在使用 render to response 将列表发送到模板 我正在使用 django 快捷方式 锄头要这么做吗 如何使用变量设置上下文实例 from django shortcuts import render to respons
  • C#:将设置导入文件/从文件导出设置

    从应用程序内将应用程序内部设置导入 导出到文件中的最佳方法是什么 我有 Settings settings 文件 与设置文件绑定的 winform UI 并且我想要导入 导出设置 类似于 Visual Studio 导入 导出设置功能 如果
  • 如何测试 ANT 中的目录是否为空?

    如何测试 ant 中的目录是否为空 您可以使用pathconvert http ant apache org manual Tasks pathconvert html任务来做到这一点 与setonempty财产
  • Lua中如何对数字表求和?

    Lua有内置的吗sum 功能 我似乎找不到一个 我几乎翻遍了文档中的所有地方 或许table sum 或类似的东西 以遵循当前的约定 但由于我找不到它 我不得不实现它 function sum t local sum 0 for k v i
  • Magento - 检查管理员和客户是否登录

    我有一个安装了 Magento 1 4 0 1 的 Web 服务器 我有另一个与之共享凭据的网站 我已经设法检查客户是否登录 在更改 Magento 中的 cookie 位置之后 但是当我还尝试确定管理员是否登录时 事情变得复杂 我只能得到
  • 当标题顺序更改时,带有状态保存的数据表过滤器会导致问题

    我有一个html页面和一些 javascript 代码 下面是我的工作html table class table table hover thead tr th class color white Employee ID th th cl
  • 检查用户是否是 SQL Server 中 dbo 角色的成员

    我需要一个 T SQL 语句来检查用户是否是 SQL Server 中数据库角色的成员 具体来说 我需要知道用户是否是 dbo 角色的成员 因为这样我就不必向该用户授予额外的权限 如果我尝试在用户为 dbo 时添加额外权限 则会失败 并且我
  • 在同一端口上支持 IPv6 和 IPv4 的 C# 服务器

    是否有可能有一个同时侦听和接受 IPv6 和 IPv4 客户端的 Socket 我在 C 中使用了 IPv6 套接字 希望它能自动向后兼容 但 IPv4 客户端会导致无效的 ip 地址异常 看一看 您可以接受 IPv4 客户端以及 IPv6
  • 有关如何部署 C++ 代码以在任何地方工作的提示

    我不是在谈论制作可移植代码 这更多的是一个分配问题 我有一个中型项目 它对常用库有几个依赖项 例如 openssl zlib 等 它在我的机器上编译得很好 现在是时候将它呈现给世界了 本质上是构建最好的工程 我想制作适用于 Windows