Вы не предоставили много информации об ошибке или коде, чтобы действительно понять проблему, но есть несколько потенциальных проблем, основанных на вашем описании:
- Возможно, вам не хватает файла
CMakeLists.txt
верхнего уровня, чтобы связать ваши файлы CMake (1) и (2) вместе.
- Несовместимые имена целей / переменных между файлами CMake (1) и (2).
Для проекта, подобного этому, типичная файловая иерархия CMake будет включать файл CMakeLists.txt
верхнего уровня с чем-то вроде:
cmake_minimum_required(VERSION 3.9)
project(MyProject1)
add_subdirectory(LibraryFolder)
add_subdirectory(TestsFolder)
Команды add_subdirectory
сообщают CMake, где еще искать дополнительные файлы CMake и другой исходный код, который вы хотите создать. В этом случае CMake будет искать в каталогах LibraryFolder
и TestsFolder
.
Другие два CMakeLists.txt
файла могут выглядеть примерно так:
CMakeLists.txt (в LibraryFolder)
project(MyLibraryProject)
# Define the library, named MyLibrary1, that you want to build here.
add_library(MyLibrary1
Puppy.cpp
Puppy.hpp
)
CMakeLists.txt (в TestsFolder)
project(MyTestsProject)
# Define the executable, named MyTestExecutable, that you want to build here.
add_executable(MyTestExecutable
main.cpp
)
# Link libraries that your executable depends on.
target_link_libraries(MyTestExecutable MyLibrary1)
Будьте внимательны, чтобы убедиться, что имена папок, предоставленные для add_subdirectory
, совпадают с именами папок в вашей системе, и чтобы ваши целевые имена CMake (например, MyLibrary1
) соответствовали всем вашим файлам.
При отладке CMake мне всегда полезно использовать команду message для вывода любых переменных, представляющих интерес для экрана. Это облегчает проверку того, что CMake делает то, что мы ожидаем.
Если у вас все еще есть вопросы, я предлагаю прочитать ответ здесь , который предоставляет больше контекста и обзора того, как использовать CMake.