如何让CMake与Go编程语言配合使用?

21

我一直使用CMake与C ++构建库和可执行文件,并希望将其用于 Go编程语言

我需要采取哪些步骤才能配置CMake以使其与Go编程语言一起工作?

实际上,我的编译器是6g,它会生成已编译的foo.6 - 我将其通过6l foo.6发送到链接器,然后完成。我已经构建和安装了编译器和链接器。

显然,我可以为此编写一个简单的Makefile,但在整个项目中始终使用CMake会很好。

感谢任何有助于我入门的建议。

3个回答

24
您可能希望实现CMake对Go语言的支持。大体上涉及以下步骤:
  1. 创建CMakeDetermineGoCompiler.cmake模块,用于为当前系统查找Go编译器。
  2. 创建CMakeGoCompiler.cmake.in 模板,该模板将由CMakeDetermineGoCompiler进行配置。
  3. 创建CMakeTestGoCompiler.cmake模块,以编译简单的go源码,以检查编译器是否正常工作。
  4. 创建CMakeGoInformation.cmake,该模块将设置一些与语言相关的变量(例如CMAKE_GO_LINK_EXECUTABLE)。

这些内容应放置在CMAKE_MODULES_DIR目录中。作为参考,您可以查看Java/CXX支持是如何实现的。

或者,如果您不想干扰这种内部机制,您可以通过创建一个macro()来解决问题,该macro()将创建一组自定义目标/命令(请参阅add_custom_{target,command}()文档)。


1
非常感谢!我已经寻找这个简单的信息两周了,因为在cmake的Modules文件夹中有很多文件,如果你只想从小处开始,会非常令人困惑。无论如何,感谢!答案太棒了! - Cristian Bidea
哇!我希望一年前当我第一次尝试做这个的时候就能找到这个答案。写得很好 :) - DavidZemon
1
有没有希望得到你提到的文件的示例? - MajesticRa
你所说的 CMAKE_MODULES_DIR 是指 CMAKE_MODULE_PATH - linuxUser123
我知道CMake适用于支持各种平台,但与Makefile的简单相比,如果您只会开发*nix,那么它似乎并不值得。 - chb

2

为了您的最佳利益,不建议使用CMake(或任何其他构建系统)。

Go语言内置了一种简单的构建包的方式:go build(它也可以让go getgo install工作)。设计上,go build不需要像make或cmake这样的额外工具。

如果您使用CMake(或任何其他构建系统),将会使您自己(如果您计划使用他人开发的库)或其他人(如果您计划开发供他人使用的库)的生活更加困难。


10
我认为例外情况是在使用gccgo并将目标文件与已经使用CMake的C、Fortran、Ada或C++项目组合时。 - Alexander
21
或者构建中间文件,例如protobuffers,或者构建可发布的tarballs,或者其他人似乎忘记存在的任务,这些任务是为那些比go get更复杂的Go项目实际编写的人准备的。 - Stephen Touset
如何使用 go build 生成 Windows 平台的 .dll 库? - Hasan A Yousef

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接