控制使用CMake add_子目录()生成哪些目标

控制使用CMake add_子目录()生成哪些目标,cmake,Cmake,我在add_subdirectory()中遇到了一个问题,即我无法控制实际使用它构建的目标-似乎只是做了一个等价的make all。我可能误用了add_subdirectory(),但据我所知,它可以用来构建依赖关系。我正在出售我的项目所依赖的几个库,在我的项目的CMakeLists.txt中,我为每个出售的项目添加了add_子目录()(所有项目都有自己的CMakeLists.txt) 因为我是交叉编译的,所以我不想构建这些库使用的任何二进制文件。在一种情况下,我还需要另一个不是由一个依赖项中的

我在add_subdirectory()中遇到了一个问题,即我无法控制实际使用它构建的目标-似乎只是做了一个等价的
make all
。我可能误用了add_subdirectory(),但据我所知,它可以用来构建依赖关系。我正在出售我的项目所依赖的几个库,在我的项目的CMakeLists.txt中,我为每个出售的项目添加了add_子目录()(所有项目都有自己的CMakeLists.txt)

因为我是交叉编译的,所以我不想构建这些库使用的任何二进制文件。在一种情况下,我还需要另一个不是由一个依赖项中的所有目标构建的目标。据我所知,add_subdirectory()无法实现这一点。有没有什么方法可以做到这一点,而我却错过了?是否有更好的CMake命令可以替代

我以前使用shell脚本时,只需在每个依赖项上调用我感兴趣的目标的cmake/make,但我正试图将其转移到只支持通过cmake调用的Android Studio中


编辑:这很糟糕,但我正在考虑使用
add\u custom\u target
手动调用
cmake
cmake--build
,以便精确控制构建,与前面一样。

该命令支持选项
EXCLUDE\u FROM\u ALL
,该选项可防止在子目录中创建的目标包含在父目录的
ALL
目标中。要仅构建所需的供应商目标,请为您自己的项目目标添加目标级别的依赖项。

据我所知,CMake为子目录中的每个目标创建单独的
make
目标。你不必为此做任何额外的事情。运行
make
时,请尝试执行
make
,其中
是您在子目录中创建的目标之一。
我不想生成这些库使用的任何二进制文件。
-如果子项目支持通过参数禁用这些二进制文件,请设置这些参数(使用
设置(…缓存…
)在
add_子目录
调用之前<代码>我还需要另一个不是由一个依赖项中的所有目标生成的目标。-只需在所有期间生成的一个目标和非所有目标之间添加依赖项即可。您可以通过检查CMAKE_交叉编译CMAKE变量来检测交叉编译。如何为通过add_子目录拉入的另一个外部项目构建所需的目标?