如何使用#include保持目录结构在cmake中?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用#include保持目录结构在cmake中?相关的知识,希望对你有一定的参考价值。

设置项目以保持目录结构与cmake时出现问题。

我想保留的项目结构:

Project
|-libA
|   |-fileA.h
|   |-fileA.cpp
|   |-CMakeLists.txt
|-include
|   |-fileI.h
|-program1
|   |-main.cpp
|   |-CMakeLists.txt
|-CMakeLists.txt

源代码包括示例:

#include "libA/fileA.h"

这不起作用。 Cmake找不到“libA / fileA.h”,它只有在我创建以下目录结构时才有效:

Project
|-libA
|   |-libA (directory)
|       |-fileA.h
|       |-fileA.cpp
|   |-CMakeLists.txt
|-include
|   |-fileI.h
|-program1
|   |-main.cpp
|   |-CMakeLists.txt
|-CMakeLists.txt

如何保持第一个示例中显示的项目结构并将目录名保留在源文件中? (例如#include“libA / fileA.h”)

项目cmake:

cmake_minimum_required(VERSION 3.8)
project(A)
include_directories( ${PROJECT_SOURCE_DIR}/include )
add_subdirectory(libA)
add_subdirectory(program1)

libA cmake:

set(LIBA_SRC libA/fileA.cpp)
add_library(libA SHARED ${LIBA_SRC})

Program1 cmake:

set (PROGRAM1_SRC main.cpp)
add_executable (program1 ${PROGRAM_SRC})
target_link_libraries (program1 libA)
target_include_directories (program1 PUBLIC ${PROJECT_SOURCE_DIR}/libA)
答案

如果将program1中的include目录更改为

target_include_directories (program1 PUBLIC ${PROJECT_SOURCE_DIR})

它将从您的源目录中搜索,因此“libA / fileA.h”将找到它的目标。

以上是关于如何使用#include保持目录结构在cmake中?的主要内容,如果未能解决你的问题,请参考以下文章

CMake 包含路径

CMake中include_directories的使用

在CMake中如何使`TARGET_LINK_LIBRARIES'禁止第三方库代码发出警告?

CMake入门实战

如何修复创建使用 PRIVATE include_directories 的库的 cmake 配置

CMake项目结构:如何正确地将库合并在一起并将它们包含在多个可执行文件中