I trying to superbuild mysql-connector-cpp
in my project. Here is my file tree:
src/
├─ app/
├─ common/
├─ core/
├─ CMakeLists.txt
ThirdParty/
├─ mysql-connector-cpp/
├─ CMakeLists.txt
CMakeLists.txt
root/CMakeLists.txt:
make_minimum_required (VERSION 3.5)
# set the build type
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif(NOT CMAKE_BUILD_TYPE)
if(CMAKE_BUILD_TYPE MATCHES Debug)
message("Debug build.")
elseif(CMAKE_BUILD_TYPE MATCHES Release)
message("Release build.")
endif()
set(application_name "cmake-project-template")
set(CMAKE_CXX_STANDARD 17)
set(application_version "1.0.2")
set(PROJECT_VER ${application_version})
cmake_policy(SET CMP0048 NEW)
project (${application_name} LANGUAGES C CXX)
# set search path for CMake modules
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
find_package(PCAP REQUIRED)
add_subdirectory(ThirdParty)
add_subdirectory(src)
ThirdParty/CMakeLists.txt:
include(ExternalProject)
set(MYSQL_CONNECTOR_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/mysql-connector-cpp_Build)
ExternalProject_Add(mysql-connector-cpp_Proj
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/mysql-connector-cpp
BINARY_DIR ${MYSQL_CONNECTOR_BINARY_DIR}
USES_TERMINAL_CONFIGURE TRUE
USES_TERMINAL_BUILD TRUE
CMAKE_ARGS
${opt_args}
-DCMAKE_INSTALL_PREFIX=${MYSQL_CONNECTOR_BINARY_DIR}/install
-DWITH_JDBC=ON
-DBUILD_STATIC=ON
)
add_library(mysql-connector-cpp INTERFACE)
set_target_properties(mysql-connector-cpp PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${MYSQL_CONNECTOR_BINARY_DIR}/include)
add_dependencies(mysql-connector-cpp mysql-connector-cpp_Proj)
src/app/CMakeLists.txt:
set(source
src/main.cpp
src/appLib.cpp
)
add_library(app ${source})
target_include_directories(app PUBLIC inc)
target_include_directories(app PRIVATE inc/app)
target_link_libraries(app PUBLIC
common
core
mysql-connector-cpp)
add_dependencies(app mysql-connector-cpp)
# TODO:
add_executable(${PROJECT_NAME} src/main.cpp)
target_link_libraries(${PROJECT_NAME} app core)
Build message:
CMakeFiles/cmake-project-template.dir/src/main.cpp.o: In function `main':
main.cpp:(.text.startup+0x131): undefined reference to `check(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
main.cpp:(.text.startup+0x178): undefined reference to `check(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&)'
main.cpp:(.text.startup+0x191): undefined reference to `sql::mysql::_get_driver_instance_by_name(char const*)'
collect2: error: ld returned 1 exit status
gmake[2]: *** [src/app/CMakeFiles/cmake-project-template.dir/build.make:101: src/app/cmake-project-template] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:241: src/app/CMakeFiles/cmake-project-template.dir/all] Error 2
gmake: *** [Makefile:136: all] Error 2