次のプロジェクト構造があります。
- CMakeLists.txt
- lib1/CMakeLists.txt および lib のすべての cpp およびヘッダー ファイル
- lib2/CMakeLists.txt および lib のすべての cpp およびヘッダー ファイル
- app/CMakeLists.txt およびアプリのすべての cpp ファイルとヘッダー ファイル
メインの CMakeLists.txt は次のようになります。
PROJECT( ${PROJECT_NAME} )
add_subdirectory(lib1)
add_subdirectory(lib2)
add_subdirectory(app)
lib1/CMakeLists.txt は、たとえば次のようになります (削除されます):
SET(SOURCE
file.cpp
)
SET(HEADERS
some_lib_header.h
)
add_library( lib1 ${SOURCE} ${HEADERS} )
アプリ用のものは、ADD_EXECUTABLE を除いて同じように見えます。
SET(SOURCE
main.cpp
)
SET(HEADERS
some_header.h
)
add_library( lib1 ${SOURCE} ${HEADERS} )
ADD_EXECUTABLE( app ${SOURCE} ${HEADERS} )
これにより、これら 3 つのプロジェクトすべてを含む 1 つの Visual Studio ソリューション ファイルを生成できるため、この方法でセットアップがうまく機能することがわかりました。しかし、私の問題は、アプリに lib1 (および lib1 に依存する lib2) のヘッダー ファイルが含まれていることです。私がする時
$mkdir build
$cd build
$cmake -C ..\myproject
必要に応じてソース外のVS .slnファイルを生成しますが、lib1のヘッダーファイルが見つからないため、アプリはコンパイルされません(明らかに)。
今、私は多くのことを読んで試しTARGET_LINK_LIBRARIES( app lib1 )
ましたadd_subdirectory( ../lib1 )
. 't fix)、および find_package (これは間違ったアプローチだと思います)。
では、どうすればこの問題を解決できますか (単純だと思います...)。