Qual deve ser a aparência do meu arquivo CMake para vincular meu programa à biblioteca Boost no Ubuntu?
Os erros mostrados durante a execução make
:
main.cpp:(.text+0x3b): undefined reference to `boost::program_options::options_description::m_default_line_length'
O arquivo principal é muito simples:
#include <boost/program_options/options_description.hpp>
#include <boost/program_options/option.hpp>
using namespace std;
#include <iostream>
namespace po = boost::program_options;
int main(int argc, char** argv) {
po::options_description desc("Allowed options");
desc.add_options()
("help", "produce help message")
;
return 0;
}
Eu consegui fazer isso. As únicas linhas que adicionei aos meus arquivos CMake foram:
target_link_libraries(
my_target_file
${Boost_PROGRAM_OPTIONS_LIBRARY}
)
target_link_libraries
após as linhasadd_executable
efind_package
, para que todos os componentes vinculados sejam conhecidos.O seguinte é minha configuração:
fonte
Adaptando a resposta @MOnsDaR para a sintaxe CMake moderna com destinos importados, isso seria:
Observe que não é necessário especificar os diretórios de inclusão manualmente, pois isso já é feito por meio do destino importado
Boost::program_options
.fonte
The FindBoost.cmake
originalmente os constrói apenas se listar explicitamente sua versão do Boost. Em algum ponto isso deveria ser melhorado, mas ainda estou vendo falhas com CMake 3.10.2 e Boost 1.66 (cópias mais recentes da cerveja).Qual biblioteca Boost? Muitos deles são modelos puros e não requerem vinculação.
Agora, com aquele exemplo concreto realmente mostrado que nos diz que você deseja as opções do programa Boost (e ainda mais nos disse que você está no Ubuntu), você precisa fazer duas coisas:
libboost-program-options-dev
para que você possa vincular a ele.cmake
para vincularlibboost_program_options
.Eu uso principalmente Makefiles, então aqui está o uso direto da linha de comando:
Parece que não faz muita coisa.
Para CMake, você precisa adicionar boost_program_options à lista de bibliotecas, e IIRC isso é feito via
SET(liblist boost_program_options)
em seuCMakeLists.txt
.fonte
Duas maneiras, usando o caminho de instalação padrão do sistema, geralmente
/usr/lib/x86_64-linux-gnu/
:Se você instalar o Boost em um diretório local ou escolher a instalação local em vez da instalação do sistema, você pode fazer isso:
Observe que o diretório acima
/home/xy/boost_install/lib/
é onde eu instalo o Boost:Se estiver interessado em como usar um Boost instalado localmente, você pode ver esta pergunta: Como faço para que o CMake encontre minha instalação alternativa do Boost? .
fonte
Aqui está minha opinião:
fonte
find_package(Boost QUIET REQUIRED)
e link para seu destino (DB32):target_link_libraries(DB32 PUBLIC Boost::headers)