Использование CMake для статической привязки к библиотеке вне проекта - программирование
Подтвердить что ты не робот

Использование CMake для статической привязки к библиотеке вне проекта

Я хотел бы использовать CMake для привязки моего проекта к моей общей библиотеке. Библиотека распределяется только между несколькими проектами и довольно мала, поэтому я бы очень хотел ее создать до того, как она будет связана. Построение его каждый раз кажется лучшей идеей, чем необходимость поддерживать обновленную предварительно скомпилированную версию, потому что я десять, чтобы изменить ее вместе с проектом. Это отдельно, потому что в нем содержится материал, который мне почти наверняка понадобится в следующем проекте.

Как мне настроить CMake для этого?

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

find_package( Boost REQUIRED COMPONENTS unit_test_framework)

include_directories(${BaumWelch_SOURCE_DIR}/../../grzesLib/src
                    ${BaumWelch_SOURCE_DIR}/src 
                    ${Boost_INCLUDE_DIRS})

if(CMAKE_COMPILER_IS_GNUCXX)
    add_definitions(-g -std=c++11 -Wall -Werror -Wextra -pedantic -Wuninitialized)
endif()


# Create the unit tests executable
add_executable(
 baumwelchtests stateindextest.cpp baumiterationtest.cpp baumwelchtest.cpp sampleparameters.cpp sdetest.cpp
 # Key includes for setting up Boost.Test
 testrunner.cpp
 # Just for handy reference
 exampletests.cpp
)

# Link the libraries
target_link_libraries( baumwelchtests ${Boost_LIBRARIES} baumwelchlib grzeslib)

но, очевидно, сбой компиляции:

/usr/bin/ld: cannot find -lgrzeslib
4b9b3361

Ответ 1

Вы упомянули, что хотите создать библиотеку, а не использовать предварительно скомпилированную версию. Если библиотека имеет CMakeList, вы должны добавить ее, используя add_subdirectory(path/to/the/library/source/directory). Затем он станет подпроектом вашего проекта, и вы можете использовать имена своих целей, как правило, в вашем CMakeList.

Обратите внимание, что, хотя команда называется add_subdirectory, она может быть произвольной директорией на диске; он не должен быть подкаталогом исходного исходного источника проекта. Если это не подкаталог, вам нужно явно указать для него двоичный каталог. Пример:

add_subdirectory(/path/to/the/library/source/directory subproject/grzeslib)

Второй аргумент, если задан как относительный путь, интерпретируется относительно CMAKE_CURRENT_BINARY_DIR.