googletest icon indicating copy to clipboard operation
googletest copied to clipboard

[Bug]: CMake target has invalid path if googletest was built with an absolute `CMAKE_INSTALL_INCLUDEDIR`

Open robertkirkman opened this issue 3 months ago • 0 comments
trafficstars

Describe the issue

Unfortunately, this line is not compatible with an absolute CMAKE_INSTALL_INCLUDEDIR because the installation prefix is prepended to the CMAKE_INSTALL_INCLUDEDIR even if it is already an absolute path.

https://github.com/google/googletest/blob/244cec869d12e53378fa0efb610cd4c32a454ec8/googletest/CMakeLists.txt#L146

That results in builds of googletest to which a relative CMAKE_INSTALL_INCLUDEDIR was passed causing this error at configure-time of reverse dependencies of googletest.

CMake Error in CMakeLists.txt:
  Imported target "GTest::gtest_main" includes non-existent path

    "/usr/local//usr/local/include"

  in its INTERFACE_INCLUDE_DIRECTORIES.

Steps to reproduce the problem

commands to build googletest with an absolute CMAKE_INSTALL_INCLUDEDIR

git clone https://github.com/google/googletest.git
cd googletest
mkdir build
cd build

# this command is the only difference
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local \
    -DCMAKE_INSTALL_INCLUDEDIR=/usr/local/include


make -j$(nproc)
sudo make install
cd ../..
mkdir test_googletest
cd test_googletest
touch empty.cpp
cat <<-EOF > CMakeLists.txt
cmake_minimum_required(VERSION 3.30)
project(test-googletest)
find_package(GTest REQUIRED)
add_library(test-googletest empty.cpp)
target_link_libraries(test-googletest GTest::gtest_main)
EOF
cmake -S . -B build

commands to build googletest with a relative CMAKE_INSTALL_INCLUDEDIR

git clone https://github.com/google/googletest.git
cd googletest
mkdir build
cd build

# this command is the only difference
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local \
    -DCMAKE_INSTALL_INCLUDEDIR=include


make -j$(nproc)
sudo make install
cd ../..
mkdir test_googletest
cd test_googletest
touch empty.cpp
cat <<-EOF > CMakeLists.txt
cmake_minimum_required(VERSION 3.30)
project(test-googletest)
find_package(GTest REQUIRED)
add_library(test-googletest empty.cpp)
target_link_libraries(test-googletest GTest::gtest_main)
EOF
cmake -S . -B build
result from absolute CMAKE_INSTALL_INCLUDEDIR
-- The C compiler identification is GNU 14.3.0
-- The CXX compiler identification is GNU 14.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found GTest: /usr/local/lib64/cmake/GTest/GTestConfig.cmake (found version "1.16.0")
-- Configuring done (0.9s)
CMake Error in CMakeLists.txt:
  Imported target "GTest::gtest_main" includes non-existent path

    "/usr/local//usr/local/include"

  in its INTERFACE_INCLUDE_DIRECTORIES.  Possible reasons include:

  * The path was deleted, renamed, or moved to another location.

  * An install or uninstall procedure did not complete successfully.

  * The installation package was faulty and references files it does not
  provide.



-- Generating done (0.0s)
CMake Generate step failed.  Build files cannot be regenerated correctly.
result from relative CMAKE_INSTALL_INCLUDEDIR
-- The C compiler identification is GNU 14.3.0
-- The CXX compiler identification is GNU 14.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found GTest: /usr/local/lib64/cmake/GTest/GTestConfig.cmake (found version "1.16.0")
-- Configuring done (0.3s)
-- Generating done (0.0s)
-- Build files have been written to: /home/tacokoneko/code/test_googletest/build

What version of GoogleTest are you using?

244cec869d12e53378fa0efb610cd4c32a454ec8

What operating system and version are you using?

Linux CORSAIR 6.12.31-gentoo-dist #1 SMP PREEMPT_DYNAMIC Thu Jun 19 14:25:47 CDT 2025 x86_64 AMD Ryzen 9 5950X 16-Core Processor AuthenticAMD GNU/Linux
LSB Version:	n/a
Distributor ID:	Gentoo
Description:	Gentoo Linux
Release:	2.17
Codename:	n/a

What compiler and version are you using?

gcc (Gentoo 14.3.0 p8) 14.3.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

What build system are you using?

cmake version 3.31.7

CMake suite maintained and supported by Kitware (kitware.com/cmake).

Additional context

First reported here in a downstream project:

  • https://github.com/termux/termux-packages/issues/25693

robertkirkman avatar Aug 14 '25 22:08 robertkirkman