soci: `soci` not found when adding as subproject
I can’t seem to be able to add soci as a subproject.
I have tried with ExternalProject_Add, and FetchContent but I can’t figure out why I keep getting:
CMake Error at src/test_app/CMakeLists.txt:21 (add_dependencies):
The dependency target "soci" of target "test_app" does not exist.
Project description
My project structure is the following:
└── src
├── CMakeLists.txt
├── cmake
│ ├── soci.cmake
│ └── spdlog.cmake
├── test_app
│ └── CMakeLists.txt
└── (...)
src/CMakeLists.txt
cmake_minimum_required(VERSION 3.11)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
include(cmake/spdlog.cmake)
include(cmake/soci.cmake)
add_subdirectory(test_app)
src/test_app/CMakeLists.txt
cmake_minimum_required(VERSION 3.11)
project(test_app LANGUAGES CXX)
add_executable(test_app main.cpp)
target_link_libraries(test_app PRIVATE
spdlog
SOCI::core
)
add_dependencies(test_app spdlog soci)
spdlog.cmake
cmake_minimum_required(VERSION 3.11)
message(STATUS "Extern: spdlog v1.4.2")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
include(FetchContent)
FetchContent_Declare( spdlog
GIT_REPOSITORY https://github.com/gabime/spdlog
GIT_TAG v1.4.2
GIT_SHALLOW ON
)
FetchContent_GetProperties(spdlog)
if(NOT spdlog_POPULATED)
set(SPDLOG_BUILD_EXAMPLE OFF)
set(SPDLOG_BUILD_EXAMPLE_HO OFF)
set(SPDLOG_BUILD_TESTS OFF)
set(SPDLOG_BUILD_TESTS_HO OFF)
set(SPDLOG_BUILD_BENCH OFF)
set(SPDLOG_SANITIZE_ADDRESS OFF)
set(SPDLOG_INSTALL ON)
set(SPDLOG_FMT_EXTERNAL OFF)
FetchContent_Populate(spdlog)
add_subdirectory(
${spdlog_SOURCE_DIR}
${spdlog_BINARY_DIR}
EXCLUDE_FROM_ALL)
endif()
soci.cmake
cmake_minimum_required(VERSION 3.11)
message(STATUS "Extern: SOCI pre4.0+git_blksail")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
include(FetchContent)
FetchContent_Declare( soci
GIT_REPOSITORY https://github.com/SOCI/soci
GIT_TAG master
GIT_SHALLOW ON
)
FetchContent_GetProperties(soci)
if(NOT soci_POPULATED)
set(SOCI_STATIC ON)
set(SOCI_SHARED ON)
set(SOCI_TESTS OFF)
# set(SOCI_ASAN OFF)
set(SOCI_CXX11 ON)
set(SOCI_LIBDIR lib)
set(WITH_SQLITE3 ON)
set(WITH_POSTGRESQL ON)
set(WITH_BOOST OFF)
set(WITH_DB2 OFF)
set(WITH_ODBC OFF)
set(WITH_ORACLE OFF)
set(WITH_MYSQL OFF)
set(SOCI_EMPTY OFF)
FetchContent_Populate(soci)
add_subdirectory(
${soci_SOURCE_DIR}
${soci_BINARY_DIR}
EXCLUDE_FROM_ALL)
endif()
About this issue
- Original URL
- State: closed
- Created 5 years ago
- Comments: 23 (11 by maintainers)
Commits related to this issue
- change dst dir for soci-config.h - Issue `soci` not found when adding as subproject #762 — committed to spjuanjoc/soci by deleted user 4 years ago
In case it’s useful, here’s a CMake function we use at work to bring in soci into our build (note the restrictions and assumptions as mentioned in the comments, etc.):
It assumes you’ve declared the details you want before calling the function. Use it something like the following:
@tt4g, I resolved the issue by changing the following in the
soci/CMakeLists.txt:I have this as a patch during the
FetchContent_Declare()insoci.cmake: