方法:TFS --> 检查 C/C++ 源文件 --> 通过 CMakeLists 构建库 --> 使用 Android Studio
HowTo: TFS --> check out C/C++ source files --> build libs through CMakeLists --> using Android Studio
标题解释了我的目的并说出了我在尝试实现它时遇到的不同问题:
- 使用 Android Studio TFVC-Plugin 查看 TFS-Project 并不是很困难 - 但我无法将本机代码项目作为模块导入 Android 申请。我试图通过 settings.gradle 和新模块包含它,但没有成功。
- 我使用 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
- 我尝试根据 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 中指定库依赖项后,您可以简单地包含该文件。现在:!
标题解释了我的目的并说出了我在尝试实现它时遇到的不同问题:
- 使用 Android Studio TFVC-Plugin 查看 TFS-Project 并不是很困难 - 但我无法将本机代码项目作为模块导入 Android 申请。我试图通过 settings.gradle 和新模块包含它,但没有成功。
- 我使用 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 - 我尝试根据 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 中指定库依赖项后,您可以简单地包含该文件。现在: