Как включить исходный файл в случай Bool.Test из другого дерева каталогов? - PullRequest
0 голосов
/ 19 февраля 2012

Это какой-то дополнительный вопрос к моему предыдущему: Как добиться организации наборов тестов и случаев с Boost?

Структура каталогов такая же, как указано в другом вопросе, и я следую описанной в ней организации случаев Boost.Test.

Однако я борюсь за то, чтобы все работало с CMake.

Мой tests/CMakeLists.txt выглядит следующим образом:

# tests/CMakeLists.txt
# Add the test sources
set(test_SOURCES ${PROJECT_SOURCE_DIR}/tests/TestRunner.cpp)

# Add test cases
add_subdirectory(model)

# Include Boost and program's sources (find_package has been executed before)
include_directories(${Boost_INCLUDE_DIR})

# Create the tests
add_executable(MyProgramTests ${test_SOURCES})

# Link agains Boost libraries
target_link_libraries(MyProgramTests ${Boost_LIBRARIES})

и tests/model/CMakeLists.txt говорит:

# tests/model/CMakeLists.txt
include(${PROJECT_SOURCE_DIR}/src/model/CMakeLists.txt)

# Add test cases to the list
set(test_SOURCES
  ${test_SOURCES}
  ${model_SOURCES}
  ${PROJECT_SOURCE_DIR}/tests/model/model_a_test.cpp
  PARENT_SCOPE
)

В src/model/CMakeLists.txt Я только что написал:

set(model_SOURCES ${PROJECT_SOURCE_DIR}/src/model/model_a.cpp)

Как мне включить src/model/model_a.cpp в мой tests/model/model_a_test.cpp, чтобы скомпилированный наконец его нашел? Я пробовал с #include "src/model/model_a.cpp", #include "model/model_a.cpp" и даже просто #include "model_a.cpp". Во всех случаях model_a.cpp не удалось найти.

Я почти уверен, что мне чего-то не хватает в файлах CMakeLists. Но что?

Редактировать

Наконец-то я решил эту проблему, добавив исходный каталог программы ${PROJECT_SOURCE_DIR}/src/model к команде include_directories в tests/CMakeLists.txt. При этом следует использовать #include "model_a.cpp".

1 Ответ

1 голос
/ 19 февраля 2012

Похоже, вам не хватает PARENT_SCOPE, чтобы вывести значение ${model_SOURCES} из src/model/CMakeLists.txt в tests/model/CMakeLists.txt

Попробуйте использовать

set(model_SOURCES ${PROJECT_SOURCE_DIR}/src/model/model_a.cpp PARENT_SCOPE)
...