2016-07-22 27 views
1

私はCMakeを習得しようとしていますが、定義されていない参照があります...リンカーエラー 私はサブディレクトリを持つディレクトリを持っています。それらの各 は独自のCMakeLists.txtを持ってい関数への未定義参照CMake

test 
|----main.cpp 
|----CMakeLists.txt 
|----test2 
    |----foo.hpp 
    |----foo.cpp 
    |----CMakeLists.txt 

テストのためのCMakeLists.txtは次のとおりです。

cmake_minimum_required(VERSION 3.5) 
project(tests) 

add_subdirectory(test2) 
set(SOURCE_FILES main.cpp) 
add_executable(tests ${SOURCE_FILES}) 

TEST2のためのCMakeLists.txtは次のとおりです。

set(test2_files 
     foo.cpp 
     foo.hpp 
     ) 
add_library(test2 ${test2_files}) 

foo.cppを実装この関数のfoo.hpp で定義されている関数です。定義されていない参照エラーが発生しています。 私は何が間違っていますか?私はこのリンカエラーを取り除くことができますどのように

EDIT:私のCMakeLists.txtは次のようになりますが、私はまだリンカエラーを取得:

project(tests) 

cmake_minimum_required(VERSION 2.8) 

set(SOURCE_FILES main.cpp) 

include_directories(test2) 
link_directories(test2) 

add_subdirectory(test) 

add_executable(${PROJECT_NAME} ${SOURCE_FILES}) 

target_link_libraries(${PROJECT_NAME} test2) 

私もtest2するのではなく、絶対パスでそれを試してみました

EDIT: は、test2のCMakeLists.txtのタイプミスであった。

答えて

4

テストCMakeLists.txtが作成されたライブラリにリンクしていることを確認してください。

project(test) 

cmake_minimum_required(VERSION 2.8) 

set(SOURCE_FILES main.cpp) 

include_directories(test2) 

#here 
link_directories(test2) 

add_subdirectory(test2) 

add_executable(${PROJECT_NAME} ${SOURCE_FILES}) 

#and here 
target_link_libraries(${PROJECT_NAME} test2) 
+0

::、-ltest2' – Exagon

+0

はラインを追加しました見つけることができないトップレベルに現地を与える: 'は/ usr/binに/ LDをtestディレクトリのCMakeLists.txtに追加リンクディレクトリの場合 – DaveyLaser

+0

* .aまたは* .soにしますか?この実装では、ビルドディレクトリに* .aファイルが生成されます。 – DaveyLaser

0

機能add_subdirectory($dir)は自動的にディレクトリとリンクディレクトリを含めるように$dirを追加しません。あなたがtestディレクトリのCMakeLists.txtで手動で行う必要がありますtest2ライブラリを使用するには:

include_directories(test2/) 
link_directories(test2/) 

を次に、関数の定義を取得するためにtest2ライブラリと実行可能ファイルをリンクします。私はこれを使用していた場合、私はこのエラーになっています

target_link_libraries(tests test2) 
関連する問題