我知道cmake是构建生成器.这意味着它可以根据CMakeLists.txt的指令生成适当的构建(makefile,Visual Studio项目等).但我不明白我认为有两个相关的事情:
为什么cmake-gui中有两个按钮"Configure"和"Generate"?在我读过的命令行教程(例如这个)中,通常的过程是用一个cmake
命令完成的.
什么是cmake世界的缓存?AFAIK是按下"配置"按钮时的状态,但未按下"生成"按钮.但为什么这有用呢?按"配置"后弹出的所有变量是什么意思?为什么我应该编辑它们?是不是唯一允许通过CMakeLists.txt完成的配置?
谢谢
Cra*_*ott 10
运行CMake时有两个阶段,如CMake GUI中的两个按钮所反映的那样.第一阶段是读入文件的配置步骤CMakeLists.txt
.CMake在此阶段构建项目的内部表示.之后,第二阶段称为生成,其中项目文件基于该内部表示被写出.
在CMake GUI中,这两个阶段可以单独运行.运行配置步骤时,GUI显示所有缓存变量(见下文),这些变量自上次配置运行以来或自CMake GUI启动以来(如果这是第一次配置运行)更改了它们的值.通常的做法是重新运行configure阶段,直到没有变量突出显示为红色.一旦configure没有留下红色的变量,你可以按下generate按钮,然后创建构建工具的本机项目文件,你就可以开始构建等了.
命令行cmake
工具不允许您单独运行配置和生成步骤.相反,它始终运行configure然后生成.
对于简单的项目,配置和生成之间的区别并不是那么重要.简单的教程通常只是将两者结合在一起,因为读者可以在不理解基本项目安排的区别的情况下离开.但是,有一些CMake功能依赖于这种区别.特别地,生成器表达式是生成时特征,其中关于构建的某些方面的决定被延迟到生成时间而不是在配置时完全处理.其中一个例子是配置特定的内容,例如编译器标志,仅为某些配置编译的源文件等.在CMake的配置步骤中并不总是知道构建配置(例如Xcode和Visual Studio是多配置构建工具,所以可以有多个,用户在构建时选择它.生成步骤将处理每种构建类型的生成器表达式,并且每个配置的结果可能不同.您可能还会发现此答案提供有关此特定示例的信息.有关利用配置阶段和生成阶段之间区别的技术的更高级示例,请参阅此文章,但请注意,这不是常用技术.
关于什么是缓存的另一个问题,CMake在变量缓存中的运行之间记录信息.在运行结束时,它会更新CMakeCache.txt
构建目录中调用的文件.当您下次运行CMake时,它会读取该缓存以预先填充各种内容,因此不必重新计算它们(如查找库和其他包),这样您就不必提供要覆盖的自定义选项每一次.您通常不会CMakeCache.txt
手动编辑(尽管可以这样做).相反,您可以在CMake GUI中修改所需的变量,然后重新运行configure步骤(不要忘记然后运行generate来创建更新的项目文件).您还可以使用该-D
选项在cmake命令行定义或修改缓存变量.
归档时间: |
|
查看次数: |
2312 次 |
最近记录: |