39
loading...
This website collects cookies to deliver better user experience
pip
, cargo
, npm
ou yarn
, esse processo se torna extremamente simples. Contudo, quando se trata de linguagens como C e C++ isso é um pouco diferente, não existe um único meio padronizado de obter bibliotecas externas. Pensando nisso, pensei em escrever esse post mostrando como automatizo a obtenção de bibliotecas de repositórios Git remotos usando o CMake.Existem soluções criadas pela comunidade como o conan
e o
vcpkg
mas elas carregam outra dependência na máquina e
requerem que a biblioteca que você quer esteja indexada por eles.
Makefile
s que definem o processo de compilação de um projeto de código-fonte. Ele fornece vários módulos que ajudam na configuração de várias formas. Um desses módulos é o FetchContent, que ajuda a obter conteúdo externo em tempo de configuração, ou seja, quando o CMake está gerando o Makefile.include(FetchContent)
FetchContent_Declare(GoogleTest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG master
)
FetchContent_MakeAvailable(GoogleTest)
add_executable(mytests "test/main.cpp" "test/awesome_test.cpp")
target_link_libraries(mytests gtest_main)
function(GET_DEPENDENCY D_NAME D_URL D_TAG)
message(CHECK_START "Configuring ${D_NAME}")
FetchContent_Declare(${D_NAME}
GIT_REPOSITORY ${D_URL}
GIT_TAG ${D_TAG}
)
FetchContent_MakeAvailable(${D_NAME})
endfunction()
get_dependecy
passando o nome, a URL e a versão (ou tag) da biblioteca.get_dependency(GoogleTest "https://github.com/google/googletest.git" master)
get_dependency(spdlog "https://github.com/gabime/spdlog" v1.8.5)
get_dependency(CLI11 "https://github.com/CLIUtils/CLI11" v1.9.1)
get_dependency(GoogleTest "https://github.com/google/googletest" master)
39