我是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中有什么不正确的?
答案 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.