makefile — CmakeList — Невозможно создать правильный CMakelist для подпапок C ++ Project

У меня есть папка проекта C ++, которая содержит две папки.

  1. папка C ++ src с несколькими подпапками и файл CmakeList.txt. Папка src содержит файл main.cpp.

    **Cmakelist.txt src folder**
    project (TestProject)
    # Include all global directories and the current directory
    include_directories(${GLOBAL_INCLUDES} ".")
    link_directories(${GLOBAL_LIB_DIRS})
    file(GLOB_RECURSE GLOBAL_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}" "*.cpp")
    add_executable(${PROJECT_NAME} ${GLOBAL_SOURCES})
    target_link_libraries(${PROJECT_NAME} ${GLOBAL_LIBS})
    set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX "d")
    install(TARGETS ${PROJECT_NAME} DESTINATION ${INSTALL_DIR})
    
  2. стандартная внешняя папка ExtLib для сборки на C ++, содержащая несколько подпапок, и скрипт build.sh для его компиляции и файл CmakeList.txt. Файлы .cpp из папки src связаны (включая файлы заголовков (.h)) с этой папкой ExtLib.

Папка Project содержит основной файл build.sh, который компилирует проект и создает папку build, включающую конфигурации отладки и выпуска. Он также содержит файл CmakeList.txt, который, я полагаю, выполняется при запуске файла build.sh. Задача, которую мне нужно выполнить в этом проекте, — создать новую папку для тестов и добавить файл (RunAllTests.cpp), который выполняет модульное тестирование (с использованием catch unit-test) в коде, записанном в файлах .cpp папки src.

Проблема, с которой я сталкиваюсь:

  • Первая проблема — когда я создаю исходный тестовый файл в своей папке тестов и пытаюсь включить заголовочные файлы из папки src, компилятор выдает фатальную ошибку, что такие (.h) файлы не найдены, что означает, что если я включу файл в Исходный файл папки тестов, который включает в себя заголовочный файл из папки ExtLib — тогда я получаю сообщение об ошибке при связывании файлов из папки ExtLib в файлах тестовой папки через файлы папки src. Все ли мои файлы Cmakelist написаны правильно?

    **Cmakelist.txt tests folder**
    cmake_minimum_required(VERSION 3.5)
    set_property(GLOBAL PROPERTY USE_FOLDERS ON)
    include_directories(../src)
    include_directories(../ExtLib)
    link_directories(${GLOBAL_LIB_DIRS})
    add_library(AConfigTest ./aconfigtest/AConfigTest.cpp)
    add_library(AClientTest ./aclienttest/AClientTest.cpp)
    add_library(AServerTest ./aservertest/AServerTest.cpp)
    file(GLOB_RECURSE GLOBAL_SOURCES
    "${PROJECT_SOURCE_DIR}/src/AConfig/*.cpp""${PROJECT_SOURCE_DIR}/src/AClient/*.cpp""${PROJECT_SOURCE_DIR}/src/AServer/*.cpp""${PROJECT_SOURCE_DIR}/src/ErrorLogger.cpp")
    add_executable(tests RunAllTests.cpp ${GLOBAL_SOURCES})
    set_target_properties(tests PROPERTIES DEBUG_POSTFIX "d")
    target_link_libraries(tests ${GLOBAL_LIBS}
    AConfigTest
    AClientTest
    AServerTest
    )
    
  • Второй вопрос: если каким-то образом я могу успешно включать файлы из других папок src или ExtLib, как я могу запустить исходный файл теста RunAllTests.cpp для выполнения моих тестовых случаев? Все ли мои файлы Cmakelist написаны правильно?

Я застрял в этой проблеме с 3 недель, мне отчаянно нужно решение для этого. Ниже приведена ошибка компилятора:

Ошибка компилятора:

make[2]: Entering directory '/home/Caspian/TestProject/build/linux/debug'
[ 56%] Building CXX object tests/CMakeFiles/tests.dir/RunAllTests.cpp.o
cd /home/Caspian/TestProject/build/linux/debug/tests && /usr/bin/c++    -I/home/Caspian/TestProject/tests/../src -I/home/Caspian/TestProject/tests/../ExtLib  -g   -o CMakeFiles/tests.dir/RunAllTests.cpp.o -c /home/Caspian/TestProject/tests/RunAllTests.cpp
In file included from /home/Caspian/TestProject/tests/RunAllTests.cpp:14:0:
/home/Caspian/TestProject/tests/../src/AConfig/Config.h:16:29: fatal error: xxplatformlayer.h: No such file or directory
compilation terminated.
tests/CMakeFiles/tests.dir/build.make:62: recipe for target 'tests/CMakeFiles/tests.dir/RunAllTests.cpp.o' failed
make[2]: *** [tests/CMakeFiles/tests.dir/RunAllTests.cpp.o] Error 1
make[2]: Leaving directory '/home/Caspian/TestProject/build/linux/debug'
CMakeFiles/Makefile2:277: recipe for target 'tests/CMakeFiles/tests.dir/all' failed
make[1]: *** [tests/CMakeFiles/tests.dir/all] Error 2
make[1]: Leaving directory '/home/Caspian/TestProject/build/linux/debug'
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2
make failed.

Проектная иерархия показана ниже:

/TestProject
│   build.sh
│   CMakeList.txt
/ExtLib
│   build.sh
│   CMakeList.txt
│   debug
│   release
│   A/include/..(multiple subfolders and .cpp files)
/src
│   build.sh
│   CMakeList.txt
│   AServer(multiple subfolders and .cpp files)
│   AClient(multiple subfolders and .cpp files)
│   AConfigt(multiple subfolders and .cpp files)
/tests
│   CMakeList.txt
│   RunAllTests.cpp
│   aservertest/AServerTest.cpp (testing src AServer)
│   aclienttest/AClientTest.cpp (testing src AClient)
│   aconfigtest/AConfigTest.cpp (testing src AConfig)

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector