Добавьте boost program_options как подмодуль git и постройте исполняемый файл с его исходными кодами. - PullRequest
0 голосов
/ 14 февраля 2020

У меня небольшой проект, который использует boost::program_options. Я хочу добавить эту (только эту) библиотеку в свой проект как git submodule и собрать свой исполняемый файл, используя его источники.

Я уже выполнил часть git submodule (git submodule add https://github.com/boostorg/program_options.git), и у меня есть Я выполнил небольшой эксперимент, в котором я создал пример приложения, используя только источники в упомянутом подмодуле (чтобы проверить, нет ли дополнительных зависимостей).

Теперь я хочу добавить эти источники в свой проект. В файле CMakeLists.txt я делаю:

set(BOOST_PROGRAM_OPTIONS_SOURCES
  boost/program_options/src/split.cpp
  boost/program_options/src/positional_options.cpp
  boost/program_options/src/parsers.cpp
  boost/program_options/src/options_description.cpp
  boost/program_options/src/convert.cpp
  boost/program_options/src/config_file.cpp
  boost/program_options/src/cmdline.cpp
  boost/program_options/src/winmain.cpp
  boost/program_options/src/variables_map.cpp
  boost/program_options/src/value_semantic.cpp
  boost/program_options/src/utf8_codecvt_facet.cpp
)

и

add_executable(
  ...
  src/main.cpp
  ${BOOST_PROGRAM_OPTIONS_SOURCES}
)

, но получаю следующую ошибку:

CMake Error at CMakeLists.txt:69 (add_executable):
  The target name "boost/program_options/src/split.cpp" is reserved or not
  valid for certain CMake features, such as generator expressions, and may
  result in undefined behavior.


CMake Error at CMakeLists.txt:86 (target_link_libraries):
  Cannot specify link libraries for target "..." which is not built
  by this project.

Что это правильный способ делать то, что я хочу>

1 Ответ

0 голосов
/ 14 февраля 2020

Я обнаружил проблему.

Я клонировал boost::program_options (git clone https://github.com/boostorg/program_options.git) в той же папке, что и CMakeLists.txt

После этого, следуя обычному FindBoost flow

set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED OFF)
set(Boost_USE_STATIC_RUNTIME OFF)

find_package(Boost 1.45.0 COMPONENTS program_options)

if(Boost_FOUND)
  message(WARNING "BOOST FOUND")
  include_directories(${Boost_INCLUDE_DIRS})
  set(BOOST_LIBS ${Boost_LIBRARIES})
else()
  set(BOOST_LIBS )
  message(WARNING "BOOST NOT FOUND")
endif()
...
...
target_link_libraries(... ${BOOST_LIBS})
...
...

CMake может найти повышение, даже если program_options не содержит CMakeLists.txt (я не могу его найти по крайней мере)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...