2015-05-08 4 views
1

У меня есть приложение, которое я хочу создать с помощью OpenCV и googletest. С CMakeLists.txt, который у меня есть, я получаю бесконечный цикл, где CMake продолжает добавлять каталоги googletest в каталог сборки.Как использовать add_subdirectory от CMake без бесконечных циклов

Я добавил googletest в качестве подкаталога (хотя он и не находится в фактическом дереве проекта), так как я читал, что перекомпиляция его для каждого проекта предотвращает всевозможные проблемы. Когда я раскомментирую линию add_subdirectory, больше нет бесконечного цикла.

Мой CMake файл:

cmake_minimum_required(VERSION 2.8.4) 
project(imageprocessing) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

IF(NOT DEFINED ENV{OpenCV_DIR}) 
set(ENV{OpenCV_DIR} "/usr/local/opencv") 
ENDIF(NOT DEFINED ENV{OpenCV_DIR}) 
MESSAGE("Using OpenCV from location: " $ENV{OpenCV_DIR} " (Override by exporting OpenCV_DIR)") 

find_package(OpenCV REQUIRED) 
include_directories(${OpenCV_INCLUDE_DIRS}) 

file(GLOB SOURCE_FILES "src/main/cpp/*.cpp") 
add_executable(imageprocessing ${SOURCE_FILES}) 
target_link_libraries(imageprocessing ${OpenCV_LIBS}) # <-- Line 16. 

########## 
# TESTING 
########## 
enable_testing() 

IF(NOT DEFINED ENV{GOOGLETEST_DIR}) 
    set(ENV{GOOGLETEST_DIR} "/usr/local/googletest/gtest-1.7.0") 
ENDIF(NOT DEFINED ENV{GOOGLETEST_DIR}) 
MESSAGE("Using Google Test from location: " $ENV{GOOGLETEST_DIR} " (Override by exporting GOOGLETEST_DIR)") 

add_subdirectory("${GOOGLETEST_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/lib_googletest") # <-- EXCLUDE_FROM_ALL does not make a difference. 

include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR}) 

############## 
# Unit Tests 
############## 
file(GLOB TEST_SOURCE_FILES "src/test/cpp/*.cpp") 
add_executable(runUnitTests ${TEST_SOURCE_FILES}) 
target_link_libraries(runUnitTests gtest gtest_main) 

add_test(NAME test_images COMMAND runUnitTests) 

сообщение об ошибке, которое появляется:

CMake Error at CMakeLists.txt:16 (target_link_libraries): 
    Attempt to add link library "opencv_core" to target "imageprocessing" which is not built in this directory. 

Моя среда:

$ cmake -version 
cmake version 2.8.12.2 

ответ

1

Что бы помочь использует правильные переменные.

Отрывок из вопроса:

IF(NOT DEFINED ENV{GOOGLETEST_DIR}) 
    set(ENV{GOOGLETEST_DIR} "/usr/local/googletest/gtest-1.7.0") 
ENDIF(NOT DEFINED ENV{GOOGLETEST_DIR}) 
MESSAGE("Using Google Test from location: " $ENV{GOOGLETEST_DIR} " (Override by exporting GOOGLETEST_DIR)") 

add_subdirectory("${GOOGLETEST_DIR}" # <-- THIS SHOULD READ $ENV{GOOGLETEST_DIR}! 
"${CMAKE_CURRENT_BINARY_DIR}/lib_googletest") # <-- EXCLUDE_FROM_ALL does not make a difference. 
Смежные вопросы