CMake的一个构建一个简单的框架(CMAKE for a build a simple frame

2019-10-18 07:28发布

我有我的脑海里有cmake的崩溃。 之后这个答案我试图做一个简单的例子,并把它放在GitHub的,因为里面有目录,有很多的文件,并且可以在这里无聊副本的一切。

我想要做的是建立一个简单的框架来处理我的Qt / OpenCV的/ OpenGL的实验。 我喜欢有与这些目录的存储库:

 root*
   |-apps
   |---test1*
   |
   |-build
   |-cmake*
   |
   |-modules
   |---foo*

(该*签署目录是那些与一些cmake的文件,如的CMakeLists.txt或FindXXModule.cmake)

在模块,我可以写的模块(例如脸部识别,画出一条模块红色立方体在OpenGL中,包含我个人的Qt物件扩展模块一个模块)。

比我更需要一种简单的方法用于创建一个应用程序,并在其链接一些模块。 为此,我想创建一个目录的CMake放在哪里FindXXModule.cmake,并在应用程序只是说: find_package(XXModule)

需要注意的是,现在我不关心安装此存储库和树形结构必须是这一个(所以如果我在一个应用程序/ test2的,我知道我可以参考CMake的目录../../cmake或模块的目录是../../modules

我已经写了一个小例子与应用程序名为test1使用该模块foo ,我把它放在GitHub的仓库 。

现在我可以编译应用程序test1与cmake的调用cmake path_to_test1_CmakeLists.txt ,我很高兴。 但是,如果我尝试推出cmake path_to_root_CmakeLists.txt这是行不通的,因为该文件Findfoo.cmake读取两个时间(和我我以前不能够使用一些if不读了两遍)。

然后,如果我通过CMake缓存等运行test1的cmake的一个foo的目录中中创建root/cmake ,我不希望它。 我想所有的文件cmake的有可能产生在root/build目录。

所以,这些都是我2问题:

  • 如何创建一个可以建立所有应用程序和所有未来的测试,我将在modules目录写的CMakeLists.txt
  • 如何避免单一的应用程序的该发射的cmake将在CMake的目录中创建文件。

很抱歉,如果我的英语和我如何cmake的作品不是好主意。我希望这是显而易见的。

编辑:

还有一件事。 在Findfoo.cmake我有一个坏的黑客:添加真正的CMakeLists.txt一个modules / foo之内当我打电话CMake的从TEST1我要补充一个子目录,是不是在树..也许这种黑客攻击可能是删除审查enteire结构..

Answer 1:

正如你说你想要把整个目录结构到源代码控制。 这意味着这些文件夹结构,你在哪里检出的每一个位置相同。 那么,为什么创建Findfoo.cmake如果你有一个相对路径foo目录?

我建议把一个的CMakeLists.txt文件中的根,增加了所有的子目录。 为了减少CMake和原始文件生成的文件之间的混淆,你应该创建一个名为./build文件夹(甚至../build),并在根目录为第一个参数是目录运行CMake的。 这将创建所有的CMake在./build目录中生成的文件,让您把它清理干净轻松的可能性。 这种工作方式称为外的源代码构建及其强烈建议以这种方式使用的cmake。 见这个问题的一个例子。



文章来源: CMAKE for a build a simple framework
标签: cmake