如何将库头添加到公共范围

问题描述

我有以下项目结构:

Project
|-include
| |-somedir
| | |-someheader.h
|-src
| |-somedir
| | |-somesource.c
| | |-CMakeLists.txt
| |-main.c
| |-CMakeLists.txt
|-lib
| |-somelib
| | |-include
| | | |-somelibheader.h
| | |-src
| | | |-somelibsource.c
| | | |-CMakeLists.txt
| | |-CMakeLists.txt
| |-CMakeLists.txt
|-CMakeLists.txt

项目/CMakeLists.txt

cmake_minimum_required(VERSION 3.13)
set(CMAKE_C_STANDARD 11)

project(Project)

list(APPEND INCLUDES ${CMAKE_SOURCE_DIR}/include) # Contains all headers will be add to target

set(LIBRARIES_ROOT ${CMAKE_SOURCE_DIR}/lib)
set(SOURCES_ROOT ${CMAKE_SOURCE_DIR}/src)

add_subdirectory(${LIBRARIES_ROOT})
add_subdirectory(${SOURCES_ROOT})

Project/src/CMakeLists.txt

add_executable(${CMAKE_PROJECT_NAME} main.c)
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${INCLUDES}) # adding headers
target_link_libraries(${CMAKE_PROJECT_NAME} ${LIBRARIES}) # linking libraries

add_subdirectory(somedir)

Project/src/somedir/CMakeLists.txt

target_sources(${CMAKE_PROJECT_NAME} PRIVATE somesource.c)

Project/lib/CMakeLists.txt

add_subdirectory(somelib)

Project/lib/somelib/CMakeLists.txt

add_library(somelib)
target_include_directories(somelib PRIVATE include)

list(APPEND INCLUDES include) # Adding lib headers to be included to target
list(APPEND LIBRARIES somelib) # Adding lib to be linked to target

add_subdirectory(src)

Project/lib/somelib/src/CMakeLists.txt

target_sources(somelib PRIVATE somelibsource.c)

在 main.c 中可以包含项目头文件,如 #include <somedir/someheader.h>,但库头文件不能。它需要相对于 main.c 路径,如 #include "../lib/somelib/include/somelibheader.h"。如何修复它并将库头添加到公共范围?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)