【问题标题】:Compiling in Code::Blocks with Dependencies在 Code::Blocks 中编译具有依赖关系
【发布时间】:2014-12-27 10:29:06
【问题描述】:

我在 Code::Blocks 中有一个使用动态库的项目,将来会使用更多。我已正确设置项目以使用该库,并且它编译并运行得非常好。

但是,我想知道是否有一种方法可以编译 exe 的发布版本在它旁边的文件夹中所需的 dll。 (我不希望每个人都追捕并复制/粘贴它们。) 我觉得我错过了一些东西,或者以错误的方式去做。

是否有 Code::Blocks 这样做或更好的方法来获取易于分发的 zipfile/项目?

我如何使用 makefile(最好是 cmake,但任何与 Windows 兼容的类型都可以)来完成此操作?

【问题讨论】:

  • 不知道 CodeBlocks 是否提供了一些“Hook”来插入脚本,但是 makefile 呢?
  • 坦率地说,我对 makefile 不是很了解——除了在谷歌上搜索“CMake 教程”之外,我真的不知道从哪里开始! (我以前使用过 CMake,并且已经将它安装在我的计算机上。)
  • 请注意 makeCMake 不能比较:第一个是调用所需配方的工具来构建某些东西(并且仅在需要时),而后者可以被视为“ makefile generator”:除了请求的 makefile/项目文件之外,它实际上并没有构建任何东西。

标签: c++ dll makefile cmake codeblocks


【解决方案1】:

CodeBlocks 提供了在构建前或构建后执行的能力。 Checkout 菜单“Project->Build options”,在“Pre/Post build steps”选项卡下,你可以插入任何你想要的 shell 命令。例如:

按下 F9 时,您会看到:

-------------- Build: Release in aaa (compiler: GNU GCC Compiler)---------------
Target is up to date.
Running target post-build steps
echo "Hi"
Hi
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 0 warnings (0 minutes, 0 seconds)

因此,您可以在此处添加任何您想将文件收集在一起的命令,例如(使用 7-zip):

7z a my_archive.zip myfile1.exe myfile2.dll readme.txt

请注意,这将在每次构建时执行,这不是您可能想要的:在编译程序中的微小更改时,您不想等待归档程序。所以也许只在一个特殊的构建目标中这样做。

【讨论】:

  • 非常感谢!我希望有一种方法可以包含所有需要的 dll 文件,因为(我相信)需要的 dll 比我必须放入项目文件夹中的要多。当我将整个项目文件夹复制到另一个地方并尝试运行发布 exe 时,它​​失败了。它说我缺少一个 dll,但是当我将它和其他相关的 dll 粘贴进去时,它抱怨我缺少 libgcc_s_sjlj-1.dll。也许我最初问错了问题,但我该如何解决这个问题?如果我必须使用 IDE 来运行它,那么一个 exe 是相当无用的。谢谢!
  • 好的,如果我理解的话,问题的第二部分是“我怎样才能获得我的应用程序请求的所有 dll 的列表?” ?.我想this answer 会回答这个问题。让我们知道。
  • 谢谢!因此,如果我要在我的可执行文件上运行depends.exe,我只需追踪dll并将它们粘贴到我的可执行文件所在的文件夹中,然后我可以将其作为zip文件分发?
  • 确实如此。但是您可能不需要全部添加它们,因为其中一些将是“Windows 标准”运行时库,因此可以在目标机器上使用。请记住,如果它符合您的需要,您可以接受答案;-)
  • 好的,谢谢!我只是等到我的问题得到完全回答,我现在肯定会接受你的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
相关资源
最近更新 更多