Введение:
Я пытаюсь использовать CMake для получения сценариев кросс-платформенной компиляции (для VS 9.0 на Windows32 и Makefiles для Unix).
Яиспытываю что-то, чего я не могу понять о add_subdirectory ().
Позвольте мне показать вам мой код:
Контекст:
Моя архитектура для модуляимя "module1" выглядит примерно так:
- CMakeLists.txt
- include /
- src /
- file1.cpp
- file2.cpp
- *. Cpp
- test /
- 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.
Я подумал ( и прочитал в документации CMake ), что add_subdirectory (dir) использовался для создания CMake вследующий подкаталог (я имею в виду, имя не может быть более ясным: p!), поэтому не следует ли продолжить CMake в каталоге test / и создать мое решение MyProjectTest.sln?
Я используюГрафический интерфейс CMake для запуска корневого CMakeLists.txt в каталоге сборки, который я создаю в корне моего модуля.Когда я исследую каталог сборки, я могу найти мой MyProjet.sln, папку test /, но в нем нет MyProjectTest.sln!