2016-04-19 10 views
0

で静的ライブラリを使用したとprobem:私はA 2つのC++のプロジェクトを持っているとBプロジェクトBが プロジェクトAは、この構造は、いくつかのサブディレクトリに分かれており、プロジェクトAに依存してcmakeプロジェクト

Project A 
|-\inc 
| |-a1.h 
| |-a2.h 
|-\src 
    |-CMakeLists.txt 
    |-\subdir_A1 
    | |-CMakeLists.txt 
    | |-a1.cpp 
    | 
    |-\subdir_A2 
     |-CMakeLists.txt 
     |-a2.cpp 

Project B 
|-\lib 
    |-a1.h 
    |-a2.h 
    |-lib_ProjectA.a 
|-\src 
    |-CMakeLists.txt 
    |-b.cpp 

問題があることですプロジェクトBはプロジェクトのA定義を解決できません。 `project_a :: A1 ::関数func1()」

UPD1

未定義の参照:私はプロジェクトBにCMakeLists.txtにtarget_link_librariesを追加しましたが、私はこのようなエラーが発生しています

サブディレクトリ(liba1.a、liba2.a)からすべてのライブラリをコッピングしてプロジェクトにリンクすることで、プロジェクトBをコンパイルすることができました。プロジェクトAを調整して1つしかできないのだろうかファイルlib_ProjectA.a

UPD2

コード:

プロジェクトA

add_library (adapter 
    adapter.cpp 
) 

target_link_libraries (adapter PUBLIC 
    net # From project's A subdirectory 
    utils # From project's A subdirectory 
) 

プロジェクトB

add_library (anthill 
    functional_block.cpp) 

target_link_libraries(anthill 
    ${PROJECT_SOURCE_DIR}/lib/libjsoncpp.a 
    ${PROJECT_SOURCE_DIR}/lib/libadapter.a 
    ${PROJECT_SOURCE_DIR}/lib/libnet.a  # Can't compile without it 
    ${PROJECT_SOURCE_DIR}/lib/libutils.a # Can't compile without it 
) 
+0

おそらく、プロジェクト 'B'の' CMakeLists.txt'に 'link_directories($ {CMAKE_SOURCE_DIR}/lib)'を設定すれば十分です。それについてはわからない、試してみて、それが解決すれば回答として追加する。 – skypjack

+0

CMakeファイルの関連部分を教えてください。 – MikeMB

+0

@MikeMB実際、プロジェクトははるかに大きく、他の名前のサブディレクトリがたくさんあります。私はもっ​​と混乱させてしまいます。今問題はliba1.aとliba2.aをコッピングせずにプロジェクトBをコンパイルすることです。出来ますか? – flipback

答えて

0

OBJECTオプションを使用するのに最適なソリューション:

関連する問題

 関連する問題