cmake:如何将目标从子目录导入到更高级别?
给定一个递归的构建结构。如何将目标从较低级别导入较高级别? 以下是一个简化的示例: 顶级CMakeLists.txt: sub1/CMakeLists.txt: sub1/subdir/CMakeLists.txt: 在顶层,所有目标都可见:cmake:如何将目标从子目录导入到更高级别?,cmake,Cmake,给定一个递归的构建结构。如何将目标从较低级别导入较高级别? 以下是一个简化的示例: 顶级CMakeLists.txt: sub1/CMakeLists.txt: sub1/subdir/CMakeLists.txt: 在顶层,所有目标都可见: 生成foo-生成foo 使酒吧-建立酒吧 实现两者-构建foo和bar 在底部标高(sub1/subdir)上,只有条形图可见: 使酒吧-建立酒吧 在中间级别,只有foo作为目标可见: 生成foo-生成foo 实现两者-构建foo和bar 制作
- 生成foo-生成foo
- 使酒吧-建立酒吧
- 实现两者-构建foo和bar
- 使酒吧-建立酒吧
- 生成foo-生成foo
- 实现两者-构建foo和bar
add_dependencies(both DEPENDS foo bar)
到
我得到以下响应以在顶部文件夹中提供帮助:
The following are some of the valid targets for this Makefile:
... all (the default if no target is provided)
... clean
... depend
... edit_cache
... rebuild_cache
... both
... foo
... bar
请查看文档:
所有目标都已在顶层可用。这是我感兴趣的下一个目录。删除依赖项没有区别,尽管它是不必要的。你是对的。您能否详细说明一下您的用例,以及为什么从顶部文件夹调用“makebar”是不够的?它最初是一种迁移。切换到cmake之前的工作流程是在包含子项目的树中工作,并从中构建目标。这当然是旧式的“源代码树”构建思想,但在原则上仍然是可能的。它也可以从源代码外构建中的构建树的子目录中执行。我查看了我的另一个CMake项目,它们似乎都以相同的方式工作(而不是您希望的方式)。你能做的就是调用
make-C。。从子目录中选择bar
,这实际上是一个比主答案更好的答案。我从来没有使用过也没有注意到make的-C选项。这主意不错。它可以工作,但不会节省你很多打字时间。如果你替换了..,至少它可以推广。。使用指向生成树顶部的环境变量。不过,它仍然没有回答来自cmake方面的问题。
add_executable(bar EXCLUDE_FROM_ALL
bar.cpp)
The following are some of the valid targets for this Makefile:
... all (the default if no target is provided)
... clean
... depend
... edit_cache
... rebuild_cache
... both
... foo
... foo.o
... foo.i
... foo.s
add_dependencies(both DEPENDS foo bar)
add_dependencies(both foo bar)
The following are some of the valid targets for this Makefile:
... all (the default if no target is provided)
... clean
... depend
... edit_cache
... rebuild_cache
... both
... foo
... bar