问题标签 [cmake-language]

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 投票
1 回答
998 浏览

cmake - CMake 语法:如何否定 if() 而如果()

CMake 的 if 命令 [1] 支持多个签名,以

如何否定前两个?

如果 CMake 文档是正确的(根据我的经验,这还很不确定),那么我的问题归结为:

如何将常量、变量或字符串 X 转换为表达式,并附加要求 X 被评估为布尔值?

[1] https://cmake.org/cmake/help/latest/command/if.html

0 投票
1 回答
883 浏览

visual-studio - CMake:将 Visual Studio 项目属性设置为从父级继承(属性表)

我正在使用 CMake 3.8.1 生成 Visual Studio 2015 项目。

添加自定义属性表:

在 CMakeLists.txt 中找不到将 vcxproj 文件中的“输出目录”、“中间目录”和其他一些 Visual Studio 项目属性设置为所需值的方法。那些输出/中间目录被 CMake 设置为一些默认值。

理想情况下,我希望将这些属性设置为

因此该项目将获取我在 my_settings.props 中的值

在 vcsproj 文件中,如果您跳过某个属性的条目,它将从父级继承该值。

有没有办法从 CMakeLists.txt 文件中自定义/设置/控制这些值?

0 投票
3 回答
2341 浏览

visual-studio - 具有使用多个值的生成器表达式的 CMake set_property 命令

我将 CMake v3.13.4 与Visual Studio 2017 Win64生成器一起使用,我需要修改 Visual Studio Librarian 的命令行选项(用于 CMake 对象库)。

为了实现这一点,CMake 提供了STATIC_LIBRARY_OPTIONS可以通过set_propertyandset_target_properties命令设置的目标属性。

文档状态STATIC_LIBRARY_OPTIONS支持生成器表达式:

的内容STATIC_LIBRARY_OPTIONS可以使用带有语法的“生成器表达式” $<...>。有关可用表达式,请参阅cmake-generator-expressions(7) 手册。有关定义构建系统属性的更多信息,请参阅cmake-buildsystem(7) 手册。

但是:无论我尝试什么,这些值都没有正确转义',例如

在 Visual Studio 中导致以下内容:

我尝试了以下方法,它们似乎都失败了。

所以我的问题是:如何使用生成器表达式将多个值传递给STATIC_LIBRARY_OPTIONSorset_property命令set_target_properties

0 投票
0 回答
180 浏览

cmake - 如何忽略子目录中的所有 cmake 开发警告?

我正在使用一些外部库,它们使用该add_subdirectory命令作为 git 子模块包含在内。他们中的一些人正在使用旧版本的 cmake,并且他们正在发出有关策略 CMP0048 和 CMP0077 的警告。

有没有办法关闭这些库的所有 cmake 警告?

我已经尝试OLD在包含项目之前明确设置策略,但它没有帮助。

我不想编辑 git 子模块中的任何文件,因为当有人必须克隆我的项目的 repo 并在他们的机器上构建它时,会有额外的步骤。

0 投票
0 回答
117 浏览

cmake - find_package 命令中 HINTS 变量的使用

我编写了一个通用函数来支持搜索依赖项。

如果我编写以下命令:

cmake(REHL7 上的 3.13.4 版本)能够正确找到依赖项并且一切正常。相反,如果我尝试编写这样的通用代码:

我收到以下错误:

使用 --trace-expand 扩展变量是完全一样的。我错过了什么?

提前致谢

0 投票
1 回答
574 浏览

c++ - 我想使用 CMakeLists.txt 在我的代码中为 linux 和 windows 集成 ODBC,但它只在 windows 中工作

我目前正在做一个需要 SQL 数据库的项目。我想让项目平台独立,所以我正在编写 CMakeLists.txt 但不幸的是它目前无法与 linux 一起使用我在 CmakeLists.txt 中有这一部分

我知道我必须将 ifelse 用于平台,所以我正在朝这个方向思考

附言。我是 CMake 写作的初学者,所以如果有人可以指导我,我会非常有帮助。

0 投票
0 回答
44 浏览

visual-studio - 如何在 CMake 中正确链接外部库的路径?

在 CMakeLists.txt 中,如果我将 .lib(静态库)文件路径定义为绝对路径,则它工作正常。但如果我定义与相对路径相同,则会引发错误。如何在没有硬编码的情况下解决它?

文件结构:

这种方式工作正常:

这种方式会引发错误:

我的 CMakeLists.txt 路径:D:\Rohit\Sandbox\demo\src\abc\CmakeLists.txt

这是我得到的错误:链接:致命错误 LNK1104:无法打开文件 '\lib\foo.lib'

另外,如果我想包含其他文件夹中的 .lib 文件(假设 foo2.lib 文件存在于工作区的 xyz 文件夹中),如何定义它?

0 投票
1 回答
1061 浏览

cmake - 未知的 CMake 命令“add_py_modules”

我正在准备构建 openage,它是 AoE2 精灵引擎的克隆。我的 cmake 命令没有被处理。“add_py_modules”在这里不可能吗?

这适用于 Windows 10,使用 vcpkg。使用的命令:

CMakeLists.txt

输出

0 投票
0 回答
211 浏览

cmake - CMake 错误地识别有效的 C++ 编译器选项?

我有一组 C++ 潜在编译器标志存储在一个变量中,并在它之上,我在 CMake 3.14.5上运行以下测试,以查看哪些适用,哪些不适用于某个版本的编译器(I' m 使用GCCCLANGICC编译同一个项目,因此有必要仅对每个相关标志应用):

对于 GCC 8 和-Wabi标志,我得到:

现在,如果我没有将标志推入内部CMAKE_CXX_FLAGS,而是使用add_compile_options(),我的测试结果会改变!!!:

现在的测试-Wabi报告:

这导致第二种情况稍后在编译时失败:

这就像add_compile_options()修改了 的结果check_cxx_compiler_flag(),这很奇怪,因为后者在前者之前运行。

只是出于好奇,我在同一个测试中结合了这两种方法(这听起来可能是多余的):

这很有效,意思-Wabi是不会添加到 C++ 文件的编译选项中。

我不希望替换 by 的使用CMAKE_CXX_FLAGSadd_compile_options()改变以前所做的测试结果使用第三个函数。

所以,问题是:我在做我不应该做的事情吗?还是我遇到了真正的错误?

我在知识库中找不到类似的东西,当我将问题发布到CMake 错误跟踪器时,我真的不明白回复。

非常感谢你的帮助。

0 投票
1 回答
151 浏览

cmake - CMake 参数按值传递?引用?或者是其他东西?

我有 2 个 CMake 脚本:

Script1.cmake:

Script2.cmake:

我用cmake -P. 它们都给出相同的输出:

对于[DEBUG1],我可以解释它,因为var1尚未定义。所以${var1}决定什么都没有。

但是对于[DEBUG2]怎么会一样传入var1and"var1"呢?

  • 对于通过"var1",我认为结果在逻辑上是合理的。

  • 但是对于传递var1,我实际上是将一些不存在的变量传递给宏m2。我认为应该有一些错误,因为该变量尚未定义。但实际上 CMake 工作正常。并${var2}解析为var1.

我之前做过一些 C++ 编程,我可以理解 pass argument by reference或 pass argument by value。但似乎这两种解释都不适合这里。似乎发生了一些隐式转换。