如何正确添加包括与CMake的目录(How to properly add include dire

2019-06-21 13:16发布

大约一年前,我问了一下在CMake的头依赖 。

最近,我意识到,这个问题似乎是,CMake的考虑这些头文件是外部项目。 至少,生成代码时:: Blocks的项目的头文件没有项目(源文件执行)中出现。 因此,在我看来,CMake的考虑这些头是外部的项目,并在依赖不跟踪他们。

在CMake的教程快速搜索只指出include_directories这似乎并没有做什么,我想...

什么是通知CMake的一个特定的目录中包含要包含头文件的正确方法,而且这些标题应该由产生的Makefile进行跟踪?

Answer 1:

有两件事情必须做到的。

首先添加目录包括:

target_include_directories(test PRIVATE ${YOUR_DIRECTORY})

如果你被卡住一个非常古老的CMake版本(2.8.10或以上),而不支持target_include_directories ,您还可以使用传统的include_directories代替:

include_directories(${YOUR_DIRECTORY})

然后,你还必须将头文件添加到当前的目标,比如你的源文件的列表:

set(SOURCES file.cpp file2.cpp ${YOUR_DIRECTORY}/file1.h ${YOUR_DIRECTORY}/file2.h)
add_executable(test ${SOURCES})

这样一来,头文件会出现在Makefile的依赖,也可用于例如在生成的Visual Studio项目,如果你生成一个。

如何使用这些头文件的几个目标:

set(HEADER_FILES ${YOUR_DIRECTORY}/file1.h ${YOUR_DIRECTORY}/file2.h)

add_library(mylib libsrc.cpp ${HEADER_FILES})
target_include_directories(mylib PRIVATE ${YOUR_DIRECTORY})
add_executable(myexec execfile.cpp ${HEADER_FILES})
target_include_directories(myexec PRIVATE ${YOUR_DIRECTORY})


Answer 2:

首先,您使用include_directories()来告诉CMake的到目录中添加-I到编辑命令行。 其次,你列出你的头add_executable()add_library()调用。

举个例子,如果你的项目的源代码是src ,你需要从报头include ,你可以做这样的:

include_directories(include)

add_executable(MyExec
  src/main.c
  src/other_source.c
  include/header1.h
  include/header2.h
)


Answer 3:

CMake的更像是如果与其他方法相比它来创建Makefile中的脚本语言(例如制造或QMAKE)。 它是不是非常酷像Python,但仍。

还有像“ 有道 ”没有这样的事情,如果在寻找各种开源项目的人如何include目录。 但有两种方法可以做到这一点。

  1. 原油include_directories将目录附加到当前项目,您将通过一系列的追加其他所有后代项目add_subdirectory命令。 有时候人们会说,这样的做法是传统的。

  2. 更优雅的方式是target_include_directories 。 它允许添加特定项目/目标目录没有(也许)不需要继承或各种include目录冲突。 还允许甚至执行细微结构和附加以下标记此命令中的一个。

私人 -只有使用这个指定的构建目标

PUBLIC -用它来指定的目标和指标,与此项目链接

接口 -仅使用它的目标与当前项目链接

PS:

  1. 这两个命令允许标记目录系统给一个提示,是不是你的业务,指定目录将包含警告。

  2. 类似的答案是与其他对命令的target_compile_definitions / add_definitions , target_compile_options / CMAKE_C_FLAGS



Answer 4:

我有同样的问题。

我的项目目录是这样的:

    --project
    ---Classes
    ----Application
    -----.h and .c files
    ----OtherFolders
    --main.cpp

我所使用,包括在所有这些文件夹中的文件:

    file(GLOB source_files
            "*.h"
            "*.cpp"
            "Classes/*/*.cpp"
            "Classes/*/*.h"
    )

    add_executable(Server ${source_files})

它完全奏效。



Answer 5:

添加include_directories("/your/path/here")

这将类似于调用gcc-I/your/path/here/选项。

确保你把双引号路径周围。 其他人没有提到这一点,它使我停留2天。 所以这个答案的人谁是很新的CMake和非常困惑。



文章来源: How to properly add include directories with CMake
标签: c++ ubuntu cmake