方法:TFS --> 检查 C/C++ 源文件 --> 通过 CMakeLists 构建库 --> 使用 Android Studio

HowTo: TFS --> check out C/C++ source files --> build libs through CMakeLists --> using Android Studio

标题解释了我的目的并说出了我在尝试实现它时遇到的不同问题:

  1. 使用 Android Studio TFVC-Plugin 查看 TFS-Project 并不是很困难 - 但我无法将本机代码项目作为模块导入 Android 申请。我试图通过 settings.gradle 和新模块包含它,但没有成功。
  2. 我使用 cmakelists.txt 链接到我检出的路径构建了本机 (C) 库。但似乎依赖关系没有设置 100% 正确。我可以很好地包含所有文件(对于编译器)但是当我构建时我收到以下错误消息:“'File_a.h' 未找到”。目录:

    Android工作室项目
    |
    + My_Android_Application
    |
    + TFVC_Workspace
    |
    + Lib_a
    | |
    | - File_a.h
    | - File_b.h
    | - File_b.c
    |
    + Lib_b 取决于 Lib_a
    |
    - File_c.h
    - File_c.c
    - File_d.h
    - File_d.c
  3. 我尝试根据 this 指南使用不同的 CMakeLists.txt,但是由于我的 TFS 文件没有存储在我的 Android Studio 的 CMakeLists 的子目录中,我被卡住了。

我无法将所有的积木拼凑在一起,我认为我的大脑有(只是一点点)混乱 - 因此非常感谢您帮助找出错误、错误的方法、损坏的设计等!

P.S。非常抱歉糟糕的目录树 - 无法让它变得更好。如果您需要有关 files/structure 的更多信息,请告诉我!

CMakeLists.txt(位于C:/Users//AndroidStudioProjects/Android_Project/app)

cmake_minimum_required(VERSION 3.4.1)
set(TFC_Path C:/Users/<user>/AndroidStudioProjects/TFVC/)
add_library( TFC_Lib_a 
             SHARED   
             ${TFC_Path}/Lib_a/File_a.h
             ${TFC_Path}/Lib_a/File_b.c                                   
             )
target_include_directories( TFC_Lib_a PUBLIC ${TFC_Path}/Interface_headers)


add_library( TFC_Lib_b 
             SHARED   
             ${TFC_Path}/Lib_b/File_c.c
             ${TFC_Path}/Lib_b/File_d.c                                   
             )

#since not all headers are automatically included, though File_a.h was listed in add_library(Lib_a), but Lib_b needs that header i am adding following line:
target_include_directories( TFC_Lib_a PUBLIC ${TFC_Path}/Lib_a) 

target_link_libraries( applications_jni TFC_Lib_b)
target_link_libraries( TFC_Lib_b TFC_Lib_a)

更新 如果我不在 Lib_a 中包含 File_a.h,编译器不会抱怨,因为 header 是通过 target_include_directories 找到的,但是当我构建缺少 Lib_a.h 的错误时仍然存在!

好吧,我通过在 "File_a.h" 包含语句之前添加“../Lib_a/”解决了包含问题。由于库中有很多文件需要调整,而且它们来自 TFS,所以这并不是我真正想要的答案。我认为在 CMakeLists 中指定库依赖项后,您可以简单地包含该文件。现在:!