From 86a722b9114d09b4036118a2b09650468bd2cdd4 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Wed, 20 Nov 2019 22:00:12 +0800 Subject: [PATCH] cmake: include ${fmt_INCLUDE_DIR} instead we should not hardwire the include path to the fmt submodule, there is chance that we are using libfmt installed in system. in my case, crimson fails to link because the the ABI of libfmt is not compatible with that of libfmt included as a submodule : && ccache /usr/bin/g++-9 .... \ -o bin/crimson-osd -Wl,-rpath,::::::::::::::::::: lib/libcrimson-common.a lib/libcrimson-os.a lib/libcrimson.a \ .... \ /usr/lib/x86_64-linux-gnu/libfmt.a \ ... /usr/bin/ld: src/crimson/osd/CMakeFiles/crimson-osd.dir/main.cc.o: in function `void fmt::v5::basic_writer > >::write_double(double, fmt::v5::basic_format_specs const&)': /var/ssd/ceph/build/../src/fmt/include/fmt/format.h:2822: undefined reference to `bool fmt::v5::internal::grisu2_format(double, fmt::v5::internal::basic_buffer&, int, bool, int&)' /usr/bin/ld: src/crimson/osd/CMakeFiles/crimson-osd.dir/main.cc.o: in function `void fmt::v5::basic_writer > >::write_double(long double, fmt::v5::basic_format_ specs const&)': /var/ssd/ceph/build/../src/fmt/include/fmt/format.h:2822: undefined reference to `bool fmt::v5::internal::grisu2_format(double, fmt::v5::internal::basic_buffer&, int, bool, int&)' /usr/bin/ld: src/crimson/osd/CMakeFiles/crimson-osd.dir/osd.cc.o: in function `void fmt::v5::basic_writer >, char> >::write_double(double, fmt:: v5::basic_format_specs const&)': /var/ssd/ceph/build/../src/fmt/include/fmt/format.h:2822: undefined reference to `bool fmt::v5::internal::grisu2_format(double, fmt::v5::internal::basic_buffer&, int, bool, int&)' /usr/bin/ld: src/crimson/osd/CMakeFiles/crimson-osd.dir/osd.cc.o: in function `void fmt::v5::basic_writer >, char> >::write_double(long dou ble, fmt::v5::basic_format_specs const&)': /var/ssd/ceph/build/../src/fmt/include/fmt/format.h:2822: undefined reference to `bool fmt::v5::internal::grisu2_format(double, fmt::v5::internal::basic_buffer&, int, bool, int&)' collect2: error: ld returned 1 exit status Signed-off-by: Kefu Chai --- src/CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9ccada1f5389..9a6f48f6fd42 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -288,11 +288,13 @@ include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/xxHash") include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/rapidjson/include") find_package(fmt 5.2.1 QUIET) -if(NOT fmt_FOUND) +if(fmt_FOUND) + include_directories(SYSTEM "${fmt_INCLUDE_DIR}") +else() message(STATUS "Could not find fmt, will build it") add_subdirectory(fmt) + include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/fmt/include") endif() -include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/fmt/include") if(WITH_SEASTAR) find_package(c-ares 1.13.0 QUIET) -- 2.47.3