序章:
CMakeを使用してクロスプラットフォームのコンパイルスクリプトを取得しようとしています(Windows32のVS 9.0およびUnixのMakefilesの場合)。
add_subdirectory()について理解できない問題が発生しています。
私のコードをお見せしましょう:
コンテクスト:
「module1」という名前のモジュールの私のアーキテクチャは次のようなものです:
- CMakeLists.txt
- 含む/
- file1.h
- file2.h
- * .h
- src /
- file1.cpp
- file2.cpp
- * .cpp
- テスト/
- CMakeLists.txt
- src /
- testfile1.cpp
- testfile2.cpp
私のアプリケーション全体のアーキテクチャは、これらのモジュールで構成されています。これらのモジュールは、それ自体が独立して機能するプロジェクトです。
私の目標:
モジュールをライブラリとしてコンパイルしたい
test/フォルダー内のコードでライブラリをテストしたい
これが私が書いたCMakeListsです:
これは、私のモジュールのルートディレクトリにあるCMakeLists.txtです。
#ENSURE MINIMUM VERSION OF CMAKE
cmake_minimum_required(VERSION 2.8)
#CONFIGURATION OF THE PROJECT
#NAME OF THE PROJECT
project(MyProject)
#OUTPUT OF THE PROJECT
set(LIBRARY_OUTPUT_PATH lib/${CMAKE_BUILD_TYPE})
#ADD THE HEADERS OF THE LIBRARY BEING CREATED
include_directories(include)
#ADD 3rd PARTY OPENCV LIBRARIES
find_package(OpenCV REQUIRED)
#ADD 3rd PARTY XERCES LIBRARIES
include_directories(${XERCES_INCLUDE_DIR})
link_directories(${XERCES_LIB_DIR})
set(Xerces_LIBS xerces-c_3D.lib)
#CONFIGURATION OF THE LIBRARY
file(GLOB_RECURSE MYPROJECT_MODULE_CXX src/*)
file(GLOB_RECURSE MYPROJECT_MODULE_HDR include/*)
#NAME OF THE PRESENT LIBRARY
set(MYPROJECT_MODULE_LIB_NAME myModuleLib)
add_library(${MYPROJECT_MODULE_LIB_NAME}
SHARED
${MYPROJECT_MODULE_CXX}
${MYPROJECT_MODULE_HDR}
)
target_link_libraries(${MYPROJECT_MODULE_LIB_NAME}
${OpenCV_LIBS}
${Xerces_LIBS}
)
#CONTINUE IN THE SUB FOLDERS
add_subdirectory(test)
そして、test /フォルダーに、CMakeLists.txtがあります。
#ENSURE MINIMUM VERSION OF CMAKE
cmake_minimum_required(VERSION 2.8)
#CONFIGURATION OF THE PROJECT
#NAME OF THE PROJECT
project(MyProjectTest)
#OUTPUT OF THE PROJECT
set(EXECUTABLE_OUTPUT_PATH bin/${CMAKE_BUILD_TYPE})
#ADD OUR TESTED LIBRARY
include_directories(../include)
link_directories(../build/lib/${CMAKE_BUILD_TYPE})
#CONFIGURATION OF THE EXE
file(GLOB_RECURSE MYPROJECT_MODULE_TEST_CXX src/*)
#NAME OF THE PRESENT EXECUTABLE
set(MYPROJECT_MODULE_TEST_BIN_NAME myModuleTest)
add_executable(${MYPROJECT_MODULE_TEST_BIN_NAME}
${MYPROJECT_MODULE_TEST_CXX}
)
target_link_libraries(${MYPROJECT_MODULE_TEST_BIN_NAME}
${MYPROJECT_MODULE_LIB_NAME}
)
質問
CMakeは、正しいMyProject.sln Visual Studio 9.0ソリューションを出力します。これは、OpenCVおよびXerces(およびその他のサードパーティライブラリ)にリンクされたライブラリで正常にコンパイルされます。ただし、テストバイナリはMyProjectTest.slnを出力しませんでした。
私は、add_subdirectory(dir)が次のサブディレクトリでCMakeを実行するために使用されたと思いました(つまり、名前を明確にすることはできませんでした:p!)。 test /ディレクトリを作成し、MyProjectTest.slnソリューションを作成しますか?
GUI CMakeを使用して、モジュールのルートに作成したビルドディレクトリでルートCMakeLists.txtを実行します。テスト/フォルダーであるMyProjet.slnを見つけることができるビルドディレクトリを探索すると、MyProjectTest.slnが含まれていません。