CMake不会使用add_executable构建可执行文件

时间:2017-06-09 22:32:03

标签: android c++ android-studio cmake executable

我是CMake的新手,我在使用CMake创建可执行文件时遇到问题。我正在尝试从单个CMakeLists.txt文件构建可执行文件和共享库。我的CMakeLists.txt如下:

ManufacturedPart inputPart;

A.CallTo(() => partRepo.InsertPart(A<ManufacturedPart>._))
  .ReturnsLazily(x => inputPart = x.Arguments.Get<ManufacturedPart>("part"));

然而,当我从命令行使用android studio / gradlew构建我的项目时,我只看到处理器创建的library.so库,从未创建test_utility可执行文件。我的CMakeLists.txt中有什么不正确的?

3 个答案:

答案 0 :(得分:3)

答案是:它构建,它只是没有打包到apk中,因为只会复制匹配模式lib*.so的文件。因此修复很简单:

add_executable(libnativebinaryname.so ...)

答案 1 :(得分:0)

很难说在没有看到实际命令的情况下发生什么事情。
话虽如此,您可能正在使用仅显式构建make processor目标的processor。从您的CMakeLists.txt,您可以看到processor目标没有test_utility目标作为依赖关系。

要编译后者,您可以:

  • 使用make制作所有目标
  • 或运行make test_utility,明确构建

答案 2 :(得分:0)

您需要将可执行文件指定为构建目标。 Android Studio默认构建.so文件,但除非您指定它们,否则不会构建可执行文件。 Here's the documentation on the topic(搜索“目标”)。

基本上,将这样的内容添加到模块的build.gradle文件中:

defaultConfig {
    externalNativeBuild {
        cmake {
            targets "executable_target"
        }
    }
}

您也可以将其置于如下产品风格之下:

productFlavors {
    chocolate {
        externalNativeBuild {
            cmake {
                targets "executable_target"
            }
        }
    }
}

如果添加任何显式构建目标,默认情况下它将不再构建所有共享对象,只会构成显式目标的依赖项。您可以指定多个目标来构建所有可执行文件和共享对象。 This bug covers improving that.