Skip to content

the right way to enable/disable Boost features in main CMake script? #106

@Bakul-Gaur

Description

@Bakul-Gaur

Hi Orphis/boost-cmake experts,

I am trying to port an old build-system to CMake (I am not too experienced with CMake).
I just tried boost-cmake and hats-off to its developers.. great package!

My project depends on Boost::locale and I am having some trouble with static linking against ICU libs. I know there are dozens of forums talking about it and suggesting changing link-order, etc. but nothing has worked for me so far. FYI, I end-up with something like this:

/usr/bin/c++    -static CMakeFiles/test_boost.dir/main.cpp.o  -o test_boost  boost-cmake/libboost_locale.a boost-cmake/libboost_thread.a boost-cmake/libboost_chrono.a /usr/lib/x86_64-linux-gnu/librt.a -lpthread /usr/local/lib/libicudata.a /usr/local/lib/libicui18n.a /usr/local/lib/libicuuc.a -ldl
/usr/bin/ld: /usr/local/lib/libicuuc.a(putil.ao): in function `uprv_dl_open_70':
putil.cpp:(.text.uprv_dl_open_70+0x16): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /usr/local/lib/libicuuc.a(udata.ao): in function `doLoadFromCommonData(signed char, char const*, char const*, char const*, char const*, char const*, char const*, char const*, signed char (*)(void*, char const*, char const*, UDataInfo const*), void*, UErrorCode*, UErrorCode*) [clone .constprop.0]':
udata.cpp:(.text._ZL20doLoadFromCommonDataaPKcS0_S0_S0_S0_S0_S0_PFaPvS0_S0_PK9UDataInfoES1_P10UErrorCodeS8_.constprop.0+0x3ca): undefined reference to `icudt70_dat'
/usr/bin/ld: udata.cpp:(.text._ZL20doLoadFromCommonDataaPKcS0_S0_S0_S0_S0_S0_PFaPvS0_S0_PK9UDataInfoES1_P10UErrorCodeS8_.constprop.0+0x4af): undefined reference to `icudt70_dat'

ICU lib has given me other troubles too, so I decided to disable it (and use the iconv lib instead) by doing:

set(BOOST_LOCALE_ENABLE_ICU_BACKEND OFF)
add_subdirectory(boost-cmake)
...

I know this is not the recommended way to override options in sub-projects. And of course it fails at configure:

-- Boost locale unsupported on platform: need either iconv or ICU.
-- Configuring done
CMake Error at CMakeLists.txt:11 (add_executable):
  Target "test_boost" links to target "Boost::locale" but the target was not
  found.  Perhaps a find_package() call is missing for an IMPORTED target, or
  an ALIAS target is missing?

I thought the option BOOST_LOCALE_ENABLE_ICONV_BACKEND in boost-cmake\libs\locale.cmake will take effect. But it doesn't. I have no idea of how to configure it right.

My questions is: what is the foreseen way to configure Boost with Orphis/boost-cmake? Can you please provide an example?

Here is my CMake script for a hello-world C++ program using Boost::locale:

cmake_minimum_required(VERSION 3.16)

project(test_boost)

# boost-cmake setup
# -----------------
find_library(RT_LIBRARY NAMES librt.a)
set(BOOST_LOCALE_ENABLE_ICU_BACKEND OFF)
add_subdirectory(boost-cmake)

# My hello-world binary
# ---------------------
add_executable(test_boost main.cpp)
target_link_libraries(test_boost
	PRIVATE
		Boost::boost
		Boost::locale
)
target_link_options(test_boost PRIVATE -static)

Other details about my setup:

  • I am using WSL2 Ubuntu 20.04.3 LTS
  • Orphis/boost-cmake branch master
  • gcc 9.3.0
  • cmake 3.16.3
  • Boost 1.71.0 (default in Orphis/boost-cmake)

Thanks in advance!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions