Reputation: 13222
I already read many questions similar to this, but they could not fix my problem.
The internal CMakeList.txt
cannot find the source file (header?) located one level above: external_header.h
Project structure:
- cmake_test_external_headers/
- CMakeLists.txt
- external_header.h
- cmake_test_external_headers/
- CMakeLists.txt
- internal_header.h
- cmake_test_external_headers.cpp
Top level CMakeLists.txt
:
cmake_minimum_required (VERSION 3.28)
project ("cmake_test_external_headers")
add_subdirectory ("cmake_test_external_headers")
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR})
external_header.h
:
#pragma once
static const int testExt = 456;
Bottom level CMakeLists.txt
:
include_directories("${CMAKE_SOURCE_DIR}")
string(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
set(${PROJECT_NAME_UC}_PUBLIC_HEADERS "external_header.h")
set(${PROJECT_NAME_UC}_HEADERS "internal_header.h")
set(${PROJECT_NAME_UC}_SOURCES "cmake_test_external_headers.cpp")
message("CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("PROJECT_NAME = ${PROJECT_NAME}")
message("PROJECT_NAME_UC = ${PROJECT_NAME_UC}")
message("${PROJECT_NAME_UC}_PUBLIC_HEADERS: ${${PROJECT_NAME_UC}_PUBLIC_HEADERS}")
message("${PROJECT_NAME_UC}_HEADERS: ${${PROJECT_NAME_UC}_HEADERS}")
message("${PROJECT_NAME_UC}_SOURCES: ${${PROJECT_NAME_UC}_SOURCES}")
add_executable(${PROJECT_NAME}
${${PROJECT_NAME_UC}_PUBLIC_HEADERS}
${${PROJECT_NAME_UC}_HEADERS}
${${PROJECT_NAME_UC}_SOURCES}
)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR})
include_directories(${CMAKE_SOURCE_DIR})
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 20)
internal_header.h
:
#pragma once
static const int testInt = 123;
cmake_test_external_headers.cpp
:
#include <iostream>
#include "internal_header.h"
#include "external_header.h"
//#include "../external_header.h"
//#include "whole/path/to/external_header.h"
int main()
{
std::cout << "Test int: " << testInt << std::endl;
std::cout << "Test ext: " << testExt << std::endl;
return 0;
}
CMake output (relevant part):
1> [CMake] CMAKE_SOURCE_DIR = C:/Users/z0052d3h/source/repos/cmake_test_external_headers
1> [CMake] PROJECT_NAME = cmake_test_external_headers
1> [CMake] PROJECT_NAME_UC = CMAKE_TEST_EXTERNAL_HEADERS
1> [CMake] CMAKE_TEST_EXTERNAL_HEADERS_PUBLIC_HEADERS: external_header.h
1> [CMake] CMAKE_TEST_EXTERNAL_HEADERS_HEADERS: internal_header.h
1> [CMake] CMAKE_TEST_EXTERNAL_HEADERS_SOURCES: cmake_test_external_headers.cpp
1> [CMake] -- Configuring done (3.2s)
1> [CMake] CMake Error at cmake_test_external_headers/CMakeLists.txt:20 (add_executable):
1> [CMake] Cannot find source file:
1> [CMake]
1> [CMake] external_header.h
1> [CMake]
1> [CMake]
1> [CMake] CMake Error at cmake_test_external_headers/CMakeLists.txt:20 (add_executable):
1> [CMake] No SOURCES given to target: cmake_test_external_headers
1> [CMake]
1> [CMake]
1> [CMake] CMake Generate step failed. Build files cannot be regenerated correctly.
Upvotes: 0
Views: 49