2017-06-09 2 views
-1

を使用してタイトルが私の目的を説明し、私はそれを実装しようと遭遇したさまざまな問題アウト話す:HOWTO:TFS - CMakeListsを通じてLIBSのビルド> - - > C/C++ソースファイルをチェックアウト> Androidのメーカー

  1. AndroidスタジオでTFSプロジェクトをチェックアウトするTFVCプラグインはそれほど難しいことではありませんが、Androidアプリケーションのモジュールとしてネイティブコードプロジェクトをインポートすることはできません。私はsettings.gradleと新しいモジュールで成功を収めようとしました。
  2. 私はチェックアウトしたパスにリンクしているcmakelists.txtを使ってネイティブ(C)ライブラリを構築しました。しかし、依存関係は100%正しく設定されていないようです。私はすべてのファイルをコンパイラのためにうまく含めることができますが、ビルドすると次のエラーメッセージが表示されます: "'File_a.h' not found"。ディレクトリ:

    AndroidStudioProjects            
    |
                + My_Android_Application
                |
                + TFVC_Workspace
                            |
                            + Lib_a
                            |         |
                            |         - File_a.h
                            |         - File_b.h
                            |         - File_b。C
                            | Lib_a
                                   に応じて
                            + Lib_b |
                                    - File_c.h
                                    - File_c.c
                                    - File_d.h
                                   からFile_d.c
  3. thisガイドに従って別のCMakeLists.txtを使用しようとしましたが、私のTFSファイルはAndroidスタジオのCMakeListsのサブディレクトリに保存されていないので、私は立ち往生しました。

私は一緒にすべてのレンガをもたらすことができないと私は私のハングアップの脳にtheresの(少しだけ)の混乱を考える - そのためにあなたの助けがエラー、間違ったアプローチ、壊れたデザインを把握するために、などは非常にされます感謝!

P.S.悪いディレクトリツリーのために申し訳ありません - それをより良くすることができませんでした。ファイル/構造に関するさらに詳しい情報が必要な場合は、私に教えてください!

がCMakeLists.txt(Cにあります:/ユーザー// AndroidStudioProjects/Android_Project /アプリ)

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が含まいけない場合は、ヘッダーはtarget_include_directoriesで見つかりますが、Lib_aが見つからないというエラーが発生したためです。残っている!

+0

**正確**のエラーメッセージをしてください。いくつかのライブラリがあり、多くはディレクトリをインクルードするので、 'file.hが見つからないというエラーの説明は役に立たない。エラーメッセージから**正確なソースファイル**がコンパイルに失敗し、**正確なヘッダファイル**が見つからないことがわかるはずです。 'CMakeLists.txt'には、これらのソースファイルとヘッダーファイルのトレースも提供されます:*ライブラリ*は与えられたソースファイルを使用し、インクルードディレクトリ*は与えられたヘッダファイルを含みます。 – Tsyvarev

+0

'set(TFC_Path C:/ Users//AndroidStudioProjects/TFVC /)はあなたの問題の一つです。ビルドを実行するユーザーについて何も想定することはできません。あなたのソリューションは、それよりも確かなものでなければなりません。 –

+0

@Tsyvarevいつも何かが恋しいことを書く時:私は木を更新し、見つからなかったファイルを指定しました - それは今よりはっきりするはずです:) –

答えて

0

まあ私は "../Lib_a/"を "File_a.h"のinclude文の前に追加することでインクルードの問題を解決しました。ライブラリには調整するファイルがたくさんあるのでTFSのものですから、これは本当に私が探していた答えではありません。私は、CMakeListsでライブラリの依存関係を指定した後、単にファイルを含めることができると思っていました。 Now:How to set up CMakeLists to not have to change the include statements from a TFS project?

関連する問題