Это какой-то дополнительный вопрос к моему предыдущему: Как добиться организации наборов тестов и случаев с 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"
.