问题标签 [cmake]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3841 浏览

macos - 雪豹上的cmake设置

我正在尝试使用与 Leopard 相同的 CMakeLists.txt 文件在 Snow Leopard 上编译我的项目,但是编译失败并显示以下错误消息:

似乎 cmake 的默认行为是在 MACOSX 上编译通用二进制文件,但是 Snow Leopard 不再支持通用二进制文件,因此我们得到了上述错误。在 Mac 上使用 cmake 仅生成 Intel 二进制文件时,有没有办法禁用与 -lcrt1.10.5.o 的链接?

0 投票
1 回答
5593 浏览

xcode - 如何在 CMake 中为特定配置设置 Xcode 属性?

我正在使用 CMake 生成一个 Xcode 项目,并且我使用

显式设置构建设置。我只想为特定配置设置它,类似于使用

我怎样才能做到这一点?

0 投票
2 回答
9355 浏览

build-process - CMake 变量或属性以识别调试和发布版本

我想为调试和发布版本设置不同的 CMake 变量。我曾尝试像这样使用 CMAKE_CFG_INTDIR :

但是在 CMake 执行其操作时,此变量的计算结果为 $(OUTDIR)。

是否有一个 CMake 变量可以用来区分调试和发布版本,或者类似于 TARGET_LINK_LIBRARIES 可以指定调试和优化库的方式?

编辑:我不能使用 CMAKE_BUILD_TYPE 因为这仅受基于 make 的生成器支持,我需要使用 Visual Studio 来实现它。

0 投票
3 回答
16403 浏览

cmake - 如何使用 cmake 只构建一次目标文件?

我有一个 CMakeLists.txt 文件,如下所示:

source1.o source2.o source3.o 文件需要很长时间才能构建,并且由于它们对所有可执行文件都是通用的,我希望每个文件只构建一次。但是,cmake 当前的行为是为每个 exec 目标分别重建它们,这是不必要的重复工作。

有没有办法告诉 cmake 只构建一次目标文件?

0 投票
10 回答
28864 浏览

git - 如何使用 cmake 将 git SHA1 作为定义传递给编译器?

在 Makefile 中,这将通过以下方式完成:

这非常有用,因为二进制文件知道确切的提交 SHA1,因此它可以在出现段错误时转储它。

如何使用 CMake 实现相同的目标?

0 投票
4 回答
39802 浏览

build-process - 如何在 CMake 生成的 Makefile 中在编译时运行命令?

我想将一些选项传递给编译器。该选项必须在编译时计算 - 每次调用'make'时,而不是'cmake'时,所以execute_process命令不会削减它。(可以?)

例如,将日期传递给 g++ 编译器,如下所示:

但是在编译时计算 DATETIME。

知道如何在 CMake 中做到这一点吗?

赏金编辑:

将接受一个最少黑客的解决方案。

请注意,我希望能够在编译时执行任意命令,而不仅仅是“日期”。

编辑2:

它必须在 Linux、Windows (VS)、Mingw、Cygwin 和 OS X 上工作。你不能假设 Ruby、Perl 或 Python,因为它们在 Windows 上是非标准的。你可以假设 BOOST,但我想这没有用。

目标是强制 cmake 生成 Makefile(在 Linux 的情况下),当 make 执行时,它将完成这项工作。

创建自定义 *.h 文件是可以的,但它必须由 make 由 Makefile(或其他操作系统上的等效文件)启动。*.h 的创建不必(也不应该)使用 cmake。

0 投票
11 回答
1514 浏览

c++ - 跨平台开发?

我正在寻找一种允许我使用 C++ 为 Linux 和 Windows 编写代码的解决方案。

在 Windows 上,我使用 Visual Studio(我在 Windows 上尝试了其他东西,但我使用DirectX,据我所知,这是最好的解决方案)。

在 Linux 上,我使用NetBeans(我非常喜欢它)。

我的问题是我希望项目独立于 Visual Studio 和 NetBeans。

有一段时间我认为CMake是解决方案,但是学习过程太重要了,我宁愿把时间花在编码上,也不愿花时间学习 CMake 的所有技巧。所以我选择了Boost.Jam。它在 Linux 上运行良好,但在 Visual Studio 上表现不佳。

我在 Windows 上创建了一个小型 Hello World 程序。我创建了一个 Visual Studio Makefile 项目,并且它正在正确编译和链接。我可以运行可执行文件,但不能从 Visual Studio 运行,它找不到可执行文件(无论我做什么)。我也无法调试。当我得到一个时,我也看不到编译错误消息。我从 Visual Studio 中看到的只是一个 makefile 操作正在进行中,并且存在错误(即使程序已创建并运行良好)。

我浏览 Boost.Jam 文档已经有一段时间了,但让我们面对现实吧,它很差(难怪没有很多人听说过)或者我很不适合这份工作(意思是愚蠢的哈哈,但为什么很少有人听说过)。

我有三个问题:

我想知道是否有人听说过使用 Boost.Jam 和 Visual Studio 的项目?如果是,我可以看看吗?

是否有与真正的 Visual Studio 集成的工具?

有多少人认为学习(正确地)使用 CMake 会花费很多时间?有什么加速技巧吗?

0 投票
1 回答
8088 浏览

c++ - 如何在 cmake 生成的 Visual Studio 项目中包含目录?

我(大致)有以下 CMakeLists.txt

生成的消息

当我生成 Visual Studio 2008 项目文件时,一切都很好......除了在项目的属性中,C/C++ 部分的“附加包含目录”中没有任何内容。当我构建时,我得到

但是,该文件就在 C:\boost_1_40_0 下。还有其他事情要做吗?

现在我在全局 c++ 目录中添加了 boost,但我想知道这是否有原因?

谢谢!

0 投票
1 回答
11406 浏览

cmake - 将一个 cmake 项目嵌入到另一个项目中?

我有两个项目,都使用 CMake。现在我想将其中一个项目作为库包含在另一个项目中,同时仍保持将它们编译为独立项目的能力。

到目前为止我所做的是:使用版本控制系统将子项目的副本克隆到父项目的子目录中。我已经使用“add_subdirectory”将子项目的 CMakeLists.txt 包含到父项目中。我通过重命名子项目中的一些目标来修复目标之间的名称冲突。

但是,我遇到的一个问题是子项目中的各种配置测试似乎没有运行。例如,子项目使用 FindThreads 模块来确定可用的同步原语。父项目不知道线程问题,因此没有任何与此相关的测试。同样,子项目对标头进行各种测试,而父项目不需要这些测试。这些测试似乎都没有运行,并且这些测试定义的符号没有被添加到 CMakeCache.txt 文件中。

我真的不想将所有子项目的测试(主要处理与父项目无关的特定于平台的问题)提升到父项目的 CMakeLists.txt 中。

0 投票
4 回答
23193 浏览

windows - 如何在 Windows 上使用 CMake 进行非交互式构建?

我想在 Windows 上使用 CMake 设置自动构建。我正在使用 Visual Studio 2005。

更新:这是我正在使用的:

我将 devenv.exe 设置为我的 PATH。然后构建我运行下面的命令。我正在使用 Hudson 进行构建。

devenv Crackpot.sln /build 调试 /project ALL_BUILD

根据http://blogs.msdn.com/aaronhallberg/archive/2007/06/29/building-from-the-command-line-with-devenv.aspx更喜欢使用“devenv”而不是“denenv.exe”因为后者可能会产生一个 GUI,从而挂起构建。