From: Kefu Chai Date: Wed, 20 Nov 2019 14:00:12 +0000 (+0800) Subject: cmake: include ${fmt_INCLUDE_DIR} instead X-Git-Tag: v15.1.0~768^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=86a722b9114d09b4036118a2b09650468bd2cdd4;p=ceph.git 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 --- 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)