【发布时间】:2018-12-12 08:27:26
【问题描述】:
我在使用 add_subdirectory() 时遇到问题,即我无法控制实际使用它构建的目标 - 似乎只是相当于 make all。我可能误用了 add_subdirectory(),但据我了解,它可用于构建依赖项。我正在出售一些我的项目所依赖的库,并且在我的项目的 CMakeLists.txt 中,我为每个出售的项目添加了 add_subdirectory()(都有自己的 CMakeLists.txt)。
因为我是交叉编译,我不想构建这些库使用的任何二进制文件。在一种情况下,我还需要另一个不是由 ALL 目标在一个依赖项中构建的目标。据我所知, add_subdirectory() 无法做到这一点。有没有办法做到这一点,我错过了?有没有更好的 CMake 命令可以替代使用?
我之前通过仅使用我感兴趣的目标对每个依赖项调用 cmake/make 来使用 shell 脚本,但我正在尝试将其移至仅支持通过 CMake 调用的 Android Studio。
编辑:这很糟糕,但我正在考虑使用 add_custom_target 手动调用 cmake 和 cmake --build 以便我可以像以前一样精确控制构建。
【问题讨论】:
-
据我了解,CMake 为子目录中的每个目标创建单独的
make目标。你不必为此做任何额外的事情。当您运行make时,尝试执行make <target_name>,其中<target_name>是您在子目录中创建的目标之一。 -
I don't want to build any binaries used by these libraries.- 如果子项目支持通过参数禁用这些二进制文件,请在调用add_subdirectory之前设置这些参数(使用set(... CACHE ...))。I also need another target that's not built by the ALL target in one dependency.- 就在您在 ALL 期间构建的目标之一和非 ALL 目标之间的add_dependency。您可以通过检查 CMAKE_CROSSCOMPILING CMake 变量来检测交叉编译。
标签: cmake