我有我的脑海里有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结构..