CMake 不会使用 add_executable 构建可执行文件
CMake does not build an executable with add_executable
我是CMake的新手,使用CMake创建可执行文件时遇到问题。我正在尝试从单个CMakeLists.txt文件构建可执行文件和共享库。我的CMakeLists.txt如下:
cmake_minimum_required(VERSION 3.4.1)
project (TestService)
include_directories(
src/main/cpp/
libs/zlib/include/
)
add_library(libz SHARED IMPORTED)
set_target_properties(libz PROPERTIES IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/libs/zlib/libs/${ANDROID_ABI}/libz.so)
find_library(log-lib log)
add_executable(
test_utility
src/main/cpp/test_utility.cpp
src/main/cpp/storage.cpp
)
target_link_libraries(test_utility ${log-lib} libz)
add_library(
processor
SHARED
src/main/cpp/com_example_testservice.cpp
src/main/cpp/storage.cpp
)
target_link_libraries(processor libz ${log-lib})
但是,当我从命令行使用 android studio/gradlew 构建我的项目时,我只看到 processor.so 库被创建,test_utility可执行文件永远不会被创建。我的CMakeList.txt中哪些不正确?
答案是:它构建,只是没有打包到 apk 中,因为只会复制与模式lib*.so
匹配的文件。因此,修复很容易:
add_executable(libnativebinaryname.so ...)
如果不看到实际的命令,很难说出引擎盖下发生了什么。
话虽如此,您可能正在使用仅显式构建目标processor
make processor
。从CMakeLists.txt
可以看到processor
目标没有test_utility
目标作为依赖项。
要编译后者,您可以:
- 要么使用
make
,使所有目标 - 或运行
make test_utility
,以显式构建它
您需要将可执行文件指定为构建目标。默认情况下,Android Studio 会构建 .so 文件,但除非您指定可执行文件,否则不会构建可执行文件。这是有关该主题的文档(搜索"目标"(。
基本上,将这样的东西添加到模块的 build.gradle 文件中:
defaultConfig {
externalNativeBuild {
cmake {
targets "executable_target"
}
}
}
您也可以将其放在产品风味下,如下所示:
productFlavors {
chocolate {
externalNativeBuild {
cmake {
targets "executable_target"
}
}
}
}
如果添加任何显式构建目标,则默认情况下它将不再生成所有共享对象,而仅生成那些依赖于显式目标的对象。您可以指定多个目标来生成所有可执行文件和共享对象。此错误涵盖了改进它。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用ndk-build.cmd构建Android.so文件
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 无法使用Qt Creator在Windows中构建yaml-cpp
- 构建一个由C和C++文件组成的库
- llvm构建器向基本块添加终止符
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- 如何跨平台将二进制资源构建到程序中?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 如何解决 Ninja c++ 构建和执行问题
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 用CMake构建C++协议
- Mingw-64 在构建和安装后不会编译 openCV 代码