I'm trying to use gtest in my project. I'm installing gtest with conan 2.x. There is my conanfile.txt:
[requires]
gtest/1.15.0
[generators]
CMakeDeps
CMakeToolchain
then I'm doing "conan install . --output-folder=build --build=missing" to get gtest dependency. Output:
======== Computing dependency graph ========
Graph root
conanfile.txt: D:\Work\probemanager\components\sl-common-utils\conanfile.txt
Requirements
gtest/1.15.0#9eb07f548819215e766e41399858454f - Cache
======== Computing necessary packages ========
Requirements
gtest/1.15.0#9eb07f548819215e766e41399858454f:e8881c31d7715e9ffccf19b87014654db155beed#d82fd97b1021341bb14d4ddd4f68739d - Cache
======== Installing packages ========
gtest/1.15.0: Already installed! (1 of 1)
WARN: deprecated: Usage of deprecated Conan 1.X features that will be removed in Conan 2.X:
WARN: deprecated: 'cpp_info.names' used in: gtest/1.15.0
======== Finalizing install (deploy, generators) ========
conanfile.txt: Writing generators to D:\Work\probemanager\components\sl-common-utils
conanfile.txt: Generator 'CMakeDeps' calling 'generate()'
conanfile.txt: CMakeDeps necessary find_package() and targets for your CMakeLists.txt
find_package(GTest)
target_link_libraries(... gtest::gtest)
conanfile.txt: Generator 'CMakeToolchain' calling 'generate()'
conanfile.txt: CMakeToolchain generated: conan_toolchain.cmake
conanfile.txt: CMakeToolchain: Preset 'conan-default' added to CMakePresets.json.
(cmake>=3.23) cmake --preset conan-default
(cmake<3.23) cmake <path> -G "Visual Studio 17 2022" -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW
conanfile.txt: CMakeToolchain generated: D:\Work\probemanager\components\sl-common-utils\CMakePresets.json
conanfile.txt: Generating aggregated env files
conanfile.txt: Generated aggregated env files: ['conanbuild.bat', 'conanrun.bat']
Install finished successfully
My directory tree:
▒▒▒▒build
▒▒▒▒include
▒▒▒▒Thread.h
▒▒▒▒src
▒▒▒▒Thread.cpp
▒▒▒▒tests
▒▒▒▒TestThread.cpp
▒▒▒▒CMAkeLists.txt
▒▒▒▒CMakeLists.txt
▒▒▒▒conanfile.txt
CMakeLists.txt from root:
cmake_minimum_required(VERSION 3.10)
cmake_policy(SET CMP0091 NEW)
project(SLCommonUtils)
option(SL_WITH_TESTS "Build SL with tests" OFF)
file(GLOB SRCS "src/*.cpp" "include/*.h")
add_library(${PROJECT_NAME} STATIC ${SRCS})
target_include_directories(${PROJECT_NAME} PRIVATE include)
if (SL_WITH_TESTS)
enable_testing()
add_subdirectory(tests)
endif(SL_WITH_TESTS)
And my CMakeLists from tests dir:
find_package(GTest REQUIRED COMPONENTS gtest_main)
add_executable(ThreadTest ThreadTest.cpp)
target_link_libraries(ThreadTest PRIVATE SLCommonUtils gtest::gtest)
add_test(NAME ThreadTest COMMAND ThreadTest)
So I build this project with command: cmake .. -G "Visual Studio 17 2022" -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DSL_WITH_TESTS=On. Output:
-- Using Conan toolchain: D:/Work/probemanager/components/sl-common-utils/build/conan_toolchain.cmake
-- Conan toolchain: CMAKE_GENERATOR_TOOLSET=v143
-- Conan toolchain: Setting CMAKE_MSVC_RUNTIME_LIBRARY=$<$<CONFIG:Release>:MultiThreadedDLL>
-- Conan toolchain: C++ Standard 14 with extensions OFF
-- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.19045.
-- Conan: Component target declared 'GTest::gtest'
-- Conan: Component target declared 'GTest::gtest_main'
-- Conan: Component target declared 'GTest::gmock'
-- Conan: Component target declared 'GTest::gmock_main'
-- Conan: Target declared 'gtest::gtest'
-- Configuring done (0.0s)
-- Generating done (0.1s)
-- Build files have been written to: D:/Work/probemanager/components/sl-common-utils/build
After this build I'm going to build directory and open the .sln file in visual studio. I write the example test like this:
#include "Thread.h"
#include "gtest/gtest.h"
TEST(ThreadTest, ExampleTest) {
EXPECT_EQ(1, 1);
}
Why visual studio does not find gtest include files? Maybe I made some mistake in CMakeLists?
Compilation output:
Assembly started...
1>------ Assembly started: Project: ThreadTest, Configuration: Debug x64 ------
1>ThreadTest.cpp
1>D:\Work\probemanager\components\sl-common-utils\tests\ThreadTest.cpp(3,10): fatal error C1083: Cannot open file inclusion: gtest/gtest.h: No such file or directory,
1>The “ThreadTest.vcxproj” project build was terminated with an error.
In conan github repo issues you can find similar question: https://github.com/conan-io/conan/issues/16721
I think that your problem arises because of different default settings used by conan and Visual Studio.
Conan uses Release
build mode by default, wherease Visual Studio uses Debug
build mode by default. Try selecting Release
build mode in your IDE and see if it works. You could also try using conan in Debug
build mode.