【问题标题】:Android Studio: Trying to compile a c++ multiple libraries code with interdependenciesAndroid Studio:尝试编译具有相互依赖关系的 c++ 多个库代码
【发布时间】:2017-10-18 16:30:30
【问题描述】:

这是我的代码结构:

  • 主要可执行文件(CMakeLists.txt) |
    • 基础库(CMakeLists.txt)
    • 分析器库(CMakeLists.txt)
    • 日志库(CMakeLists.txt)

每个库都在使用基础库。 主要是使用每个库。

其实这是主可执行文件的CMakeLists.txt:

cmake_minimum_required(VERSION 3.4.1)

# build native_app_glue as a static lib
add_library(native_app_glue STATIC
    ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -Wall -fno-exceptions -fno-rtti")

# build the ndk-helper library
set(ndk_helper_dir ../../../../common/ndk_helper)
add_subdirectory(${ndk_helper_dir} ndk_helper)

# build the base library
set(base_dir ../../../../common/base)
add_subdirectory(${base_dir} base)

# build the profile library
set(profile_dir ../../../../common/profile)
add_subdirectory(${profile_dir} profile)

# build the log library
set(log_dir ../../../../common/log)
add_subdirectory(${log_dir} log)

# Export ANativeActivity_onCreate(),

# Refer to: https://github.com/android-ndk/ndk/issues/381.
set(CMAKE_SHARED_LINKER_FLAGS
    "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")

# now build app's shared lib
add_library(MainActivity SHARED
    MainActivity.cpp
    MainRenderer.cpp)

target_include_directories(MainActivity PRIVATE
    ${ANDROID_NDK}/sources/android/cpufeatures
    ${ANDROID_NDK}/sources/android/native_app_glue
    ${ndk_helper_dir}
    ${base_dir}
    ${profile_dir}
    ${log_dir}
    )

# add lib dependencies
target_link_libraries(MainActivity
    android
    native_app_glue
    atomic
    EGL
    GLESv2
    log
    ndk-helper
    base
    profile
    log
    )

我无法在编译时将包含路径从任何库添加到基础库。我正在尝试这样做:

关于profile库对应的CMakeLists.txt

include_directories(        ".."
                            "../.."
                            "../base/include"
                            "../../base/include"
                            "../../../base/include"
                            "./include"
                            "include"
                            )

target_include_directories(profile PRIVATE
                            ${base_dir}
                            ".."
                            "../.."
                            "../base/include"
                            "../../base/include"
                            "../../../base/include"
                            "./include"
                            )

在编译时我遇到一个错误,例如找不到位于基础库中的“something.h”。如果我改为“../../base/include/something.h”,一切正常......

我想为包含文件夹添加这些默认自动路径。有没有办法做到这一点?我该怎么做?

我已经为此苦苦挣扎了很长时间。任何帮助表示赞赏。

【问题讨论】:

    标签: c++ compilation cmake libraries


    【解决方案1】:

    好的,我找到了答案……

    target_include_directories(个人资料私人 ${base_dir} “..” “../..” “../基地/包括” “../../基础/包含” “../../../base/include” “。/包括” )

    从 PRIVATE 移动到 PUBLIC 成功了,所以我现在可以访问包含文件夹了。 还是看不懂 PRIVATE 这个词的真正用途,为什么要定义一个包含目录,以后就不能用了?没有意义……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      • 2018-01-09
      • 2011-06-26
      • 1970-01-01
      • 2017-08-04
      • 2020-04-02
      相关资源
      最近更新 更多