问题标签 [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.
cmake - CMake 语法:如何否定 if() 而如果()
CMake 的 if 命令 [1] 支持多个签名,以
如何否定前两个?
如果 CMake 文档是正确的(根据我的经验,这还很不确定),那么我的问题归结为:
如何将常量、变量或字符串 X 转换为表达式,并附加要求 X 被评估为布尔值?
visual-studio - CMake:将 Visual Studio 项目属性设置为从父级继承(属性表)
我正在使用 CMake 3.8.1 生成 Visual Studio 2015 项目。
添加自定义属性表:
在 CMakeLists.txt 中找不到将 vcxproj 文件中的“输出目录”、“中间目录”和其他一些 Visual Studio 项目属性设置为所需值的方法。那些输出/中间目录被 CMake 设置为一些默认值。
理想情况下,我希望将这些属性设置为
因此该项目将获取我在 my_settings.props 中的值
在 vcsproj 文件中,如果您跳过某个属性的条目,它将从父级继承该值。
有没有办法从 CMakeLists.txt 文件中自定义/设置/控制这些值?
visual-studio - 具有使用多个值的生成器表达式的 CMake set_property 命令
我将 CMake v3.13.4 与Visual Studio 2017 Win64
生成器一起使用,我需要修改 Visual Studio Librarian 的命令行选项(用于 CMake 对象库)。
为了实现这一点,CMake 提供了STATIC_LIBRARY_OPTIONS
可以通过set_property
andset_target_properties
命令设置的目标属性。
文档状态STATIC_LIBRARY_OPTIONS
支持生成器表达式:
的内容
STATIC_LIBRARY_OPTIONS
可以使用带有语法的“生成器表达式”$<...>
。有关可用表达式,请参阅cmake-generator-expressions(7) 手册。有关定义构建系统属性的更多信息,请参阅cmake-buildsystem(7) 手册。
但是:无论我尝试什么,这些值都没有正确转义',例如
在 Visual Studio 中导致以下内容:
我尝试了以下方法,它们似乎都失败了。
所以我的问题是:如何使用生成器表达式将多个值传递给STATIC_LIBRARY_OPTIONS
orset_property
命令set_target_properties
?
cmake - 如何忽略子目录中的所有 cmake 开发警告?
我正在使用一些外部库,它们使用该add_subdirectory
命令作为 git 子模块包含在内。他们中的一些人正在使用旧版本的 cmake,并且他们正在发出有关策略 CMP0048 和 CMP0077 的警告。
有没有办法关闭这些库的所有 cmake 警告?
我已经尝试OLD
在包含项目之前明确设置策略,但它没有帮助。
我不想编辑 git 子模块中的任何文件,因为当有人必须克隆我的项目的 repo 并在他们的机器上构建它时,会有额外的步骤。
cmake - find_package 命令中 HINTS 变量的使用
我编写了一个通用函数来支持搜索依赖项。
如果我编写以下命令:
cmake(REHL7 上的 3.13.4 版本)能够正确找到依赖项并且一切正常。相反,如果我尝试编写这样的通用代码:
我收到以下错误:
使用 --trace-expand 扩展变量是完全一样的。我错过了什么?
提前致谢
c++ - 我想使用 CMakeLists.txt 在我的代码中为 linux 和 windows 集成 ODBC,但它只在 windows 中工作
我目前正在做一个需要 SQL 数据库的项目。我想让项目平台独立,所以我正在编写 CMakeLists.txt 但不幸的是它目前无法与 linux 一起使用我在 CmakeLists.txt 中有这一部分
我知道我必须将 ifelse 用于平台,所以我正在朝这个方向思考
附言。我是 CMake 写作的初学者,所以如果有人可以指导我,我会非常有帮助。
visual-studio - 如何在 CMake 中正确链接外部库的路径?
在 CMakeLists.txt 中,如果我将 .lib(静态库)文件路径定义为绝对路径,则它工作正常。但如果我定义与相对路径相同,则会引发错误。如何在没有硬编码的情况下解决它?
文件结构:
这种方式工作正常:
这种方式会引发错误:
我的 CMakeLists.txt 路径:D:\Rohit\Sandbox\demo\src\abc\CmakeLists.txt
这是我得到的错误:链接:致命错误 LNK1104:无法打开文件 '\lib\foo.lib'
另外,如果我想包含其他文件夹中的 .lib 文件(假设 foo2.lib 文件存在于工作区的 xyz 文件夹中),如何定义它?
cmake - 未知的 CMake 命令“add_py_modules”
我正在准备构建 openage,它是 AoE2 精灵引擎的克隆。我的 cmake 命令没有被处理。“add_py_modules”在这里不可能吗?
这适用于 Windows 10,使用 vcpkg。使用的命令:
CMakeLists.txt:
输出:
cmake - CMake 错误地识别有效的 C++ 编译器选项?
我有一组 C++ 潜在编译器标志存储在一个变量中,并在它之上,我在 CMake 3.14.5上运行以下测试,以查看哪些适用,哪些不适用于某个版本的编译器(I' m 使用GCC、CLANG和ICC编译同一个项目,因此有必要仅对每个相关标志应用):
对于 GCC 8 和-Wabi
标志,我得到:
现在,如果我没有将标志推入内部CMAKE_CXX_FLAGS
,而是使用add_compile_options()
,我的测试结果会改变!!!:
现在的测试-Wabi
报告:
这导致第二种情况稍后在编译时失败:
这就像add_compile_options()
修改了 的结果check_cxx_compiler_flag()
,这很奇怪,因为后者在前者之前运行。
只是出于好奇,我在同一个测试中结合了这两种方法(这听起来可能是多余的):
这很有效,意思-Wabi
是不会添加到 C++ 文件的编译选项中。
我不希望替换 by 的使用CMAKE_CXX_FLAGS
会add_compile_options()
改变以前所做的测试结果并使用第三个函数。
所以,问题是:我在做我不应该做的事情吗?还是我遇到了真正的错误?
我在知识库中找不到类似的东西,当我将问题发布到CMake 错误跟踪器时,我真的不明白回复。
非常感谢你的帮助。
cmake - CMake 参数按值传递?引用?或者是其他东西?
我有 2 个 CMake 脚本:
Script1.cmake:
Script2.cmake:
我用cmake -P
. 它们都给出相同的输出:
对于[DEBUG1]
,我可以解释它,因为var1
尚未定义。所以${var1}
决定什么都没有。
但是对于[DEBUG2]
,怎么会一样传入var1
and"var1"
呢?
对于通过
"var1"
,我认为结果在逻辑上是合理的。但是对于传递
var1
,我实际上是将一些不存在的变量传递给宏m2
。我认为应该有一些错误,因为该变量尚未定义。但实际上 CMake 工作正常。并${var2}
解析为var1
.
我之前做过一些 C++ 编程,我可以理解 pass argument by reference或 pass argument by value。但似乎这两种解释都不适合这里。似乎发生了一些隐式转换。