这个问题是关于project
命令,以及project
在cmake中的含义是什么概念。我真的不明白project
是什么,以及它与target
(我认为,我认为)的区别。
我查看了cmake documentation for the project
命令,它说project
命令执行此操作:
为整个项目设置名称,版本和启用语言。
不言而喻,使用 project 这个词定义项目并不是很有帮助。
页面上没有任何地方可以解释实际上 的项目是什么(它通过命令执行的某些事情,但是没有说明是否列表是否排他)。 cmake.org examples带我们完成了一个基本的构建设置,虽然它使用了project
关键字,但它也没有解释它的作用或意义,至少不是我能说的。
什么是项目? project
命令有什么作用?
答案 0 :(得分:20)
项目在逻辑上将许多目标(即库,可执行文件和自定义构建步骤)分组到一个可以自行构建的自包含集合中。
在实践中,这意味着,如果project
中有CMakeLists.txt
命令,则应该能够从该文件运行CMake,并且生成器应该生成可构建的内容。在大多数代码库中,每个构建只有一个项目。
但请注意,您可以嵌套多个项目。顶级项目可以包括子目录,该子目录又是另一个自包含项目。在这种情况下,project
命令为某些值引入了额外的范围。例如,PROJECT_BINARY_DIR
变量将始终指向当前项目的根二进制目录。将其与CMAKE_BINARY_DIR
进行比较,{{3}}始终指向顶级项目的二进制目录。另请注意,某些生成器可能会为项目生成其他文件。例如,Visual Studio生成器将为每个子项目创建一个.sln
解决方案文件。
如果您的代码库非常复杂并且需要用户能够单独构建某些组件,请使用子项目。这为构建构建系统提供了非常强大的机制。由于增加了编码和维护费用,使得几个子项目真正自成一体,我建议如果你有一个真正的用例,那么只能走这条路。将代码库拆分为不同的目标应该始终是构建构建的首选机制,而子项目应该保留用于那些您真正需要使目标的子集自包含的极少数情况。