When I run the conan install command, as specified below, I expect to generate conan_toolchain.cmake and a conan_deps.cmake files in my output folder. But only conan_toolchain.cmake is present. And from the conan_deps.cmake, I expect the ${CONAN_INCLUDE_DIRS} to correctly add the directories of the build sources. Also note, this code worked fine with conan 1.x, using cmake as the generator, conan_basic_setup() in the cmakelist, and using the conanbuildinfo.cmake file previously generated.
When I run the following... `
(.env) user@mercury:~/dev/myapp$ conan install . --output-folder=cmake-build-debug -g CMakeToolchain -g CMakeDeps
I expect to generate ${CMAKE_BINARY_DIR}/conan_deps.cmake. I've searched through the conan documentation, but they all say to expect the file.
Top level CMakeList.txt
make_minimum_required (VERSION 3.10)
set (CMAKE_CXX_STANDARD 17)
project (Ares)
include(${CMAKE_BINARY_DIR}/conan_toolchain.cmake)
include(${CMAKE_BINARY_DIR}/conan_deps.cmake) # this is not found
#conan_basic_setup()
message(STATUS "Conan Include Dirs: ${CONAN_INCLUDE_DIRS}") ## this is returning empthy
message(STATUS "Binary Dirs: ${CMAKE_BINARY_DIR}")
include(${CMAKE_BINARY_DIR}/conan_deps.cmake)
get_cmake_property(_variableNames VARIABLES)
list (SORT _variableNames)
foreach (_variableName ${_variableNames})
message(STATUS "${_variableName}=${${_variableName}}")
endforeach()
unset(BUILD_TEST CACHE)
option(BUILD_TEST "Build the unit tests" ON)
if(BUILD_TEST)
enable_testing()
message(STATUS "Building Unit Tests")
endif()
if(NOT (UNIX AND CMAKE_COMPILER_IS_GNUCXX))
message(FATAL_ERROR "Must compile on UNIX with GCC" )
endif()
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE)
if(COMPILER_SUPPORTS_MARCH_NATIVE)
message(STATUS "Using Native Architecture Flag")
add_compile_options("-march=native")
endif()
# Add warnings
add_compile_options("-Wall" "-Wextra" "-Wno-unknown-pragmas" "-Wno-int-in-bool-context" "-Wno-unused-parameter" "-Werror=switch" "-Wno-empty-body")
# Use -03 optimizations if in release
add_compile_options("$<$<CONFIG:RELEASE>:-O3>")
add_compile_options("$<$<CONFIG:DEBUG>:--coverage>")
link_libraries("$<$<CONFIG:DEBUG>:--coverage>")
if(NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
message(WARNING "You are using an unsupported compiler! Compilation has only been tested with GCC.")
endif()
add_definitions(-DSBE_HAVE_CMATH)
#add_definitions(-DSBE_NO_BOUNDS_CHECK)
add_definitions(-DHFFIX_NO_BOOST_DATETIME)
#add_definitions(-DQL_USE_STD_SHARED_PTR)
include( modules/VersionFromGit.cmake )
add_subdirectory (schemas)
add_subdirectory (platform)
Here is the summary of the output...
======== Finalizing install (deploy, generators) ========
conanfile.txt: Writing generators to /home/user/dev/myapp/cmake-build-debug
conanfile.txt: Generator 'CMakeDeps' calling 'generate()'
conanfile.txt: Generator 'CMakeToolchain' calling 'generate()'
conanfile.txt: CMakeToolchain generated: conan_toolchain.cmake
conanfile.txt: Preset 'conan-release' added to CMakePresets.json. Invoke it manually using 'cmake --preset conan-release' if using CMake>=3.23
conanfile.txt: If your CMake version is not compatible with CMakePresets (<3.23) call cmake like: 'cmake <path> -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=/home/user/dev/myapp/cmake-build-debug/conan_toolchain.cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_BUILD_TYPE=Release'
conanfile.txt: CMakeToolchain generated: CMakePresets.json
conanfile.txt: CMakeToolchain generated: ../CMakeUserPresets.json
conanfile.txt: Generating aggregated env files
conanfile.txt: Generated aggregated env files: ['conanbuild.sh', 'conanrun.sh']
Install finished successfully
In Conan 1.X the
cmakelegacy generator created aconanbuildinfo.cmakefile that could be included in theCMakeLists.txtwithinclude(.../conanbuildinfo.cmake)This generator was superseded some time ago, already in Conan 1.X (this is not specific of Conan 2.0) by the
CMakeToolchainandCMakeDeps, that implements a full transparent integration, that means, they can be used without modifying at all theCMakeLists.txtin any way that is specific to Conan, and they can be fully agnostic. This is achieved by:CMakeToolchaingenerates a toolchain file that can be passed in-DCMAKE_TOOLCHAIN_FILE=...argument in command line (or defined in CMakePresets, also generated by Conan, so just callingcmake --preset ...works)CMakeDepsgenerates differentxxx-config.cmakefiles, one per dependency, so theCMakeLists.txtcan use them just with the standard and CMake-blessed way of doingfind_package(pkgname)and then linked withtarget_link_libraries(... pkg::pkg)