【问题标题】:CMake include_directories for custom target typeCMake include_directories 用于自定义目标类型
【发布时间】:2018-05-08 14:43:56
【问题描述】:

我有一个带有 .cpp 和 .h 源文件的自定义目标。像往常一样,这些文件包括其他头文件。我想为要查看的头文件添加一个目录。

到目前为止,这可能听起来很简单,但这里有一些转折点。我正在使用自定义目标和自定义命令来编译和链接程序。实际编译器需要另一种类型的工程文件,与CMake不兼容。

如果我尝试将包含目录添加到当前目标,则会收到以下错误:

target_include_directories called with non-compliant target type.

我认为这可能的原因是您可以在我从 CMake 创建的 Visual Studio 项目中添加头文件查找路径。我不想这样做,因为它不是持久的,我团队中的每个人也必须这样做。更糟糕的是,我必须向他们解释......(颤抖)


编辑:

为了回答 cmets,我正在生成 Visual Studio 2017 项目文件。 我的自定义目标命令只是:

add_custom_target(APP
DEPENDS ${APP_DEPENDENCIES}
SOURCES ${APP_DEPENDENCIES}
)

我的自定义命令是:

add_custom_command(
OUTPUT "${LIB_COMPILE_DIR}/libAPP.a"
DEPENDS ${LIB_COMPILE_SRCS}
COMMAND gbuild -top ${LIB_COMPILE_DIR}/App.gpj
WORKING_DIRECTORY ${LIB_COMPILE_DIR}
)

我知道 CMake 有一个 GHS MULTI 生成器,但它是实验性的,在我的情况下不起作用。

【问题讨论】:

  • 你试过香草include_directories吗?
  • 是的,但我猜它只会将包含目录添加到有效目标中。可悲的是,我的目标不是其中之一。
  • 你能分享你的自定义目标和自定义命令吗?你用什么来建造这个?您可以使用 VERBOSE=1 来显示传递给编译器的内容吗?
  • 这方面有什么进展吗?
  • 嗯,有点,有点不。似乎没有办法直接做到这一点。我认为可以通过脚本将包含路径添加到生成的项目文件中。这个我没试过。

标签: cmake


【解决方案1】:

我遇到了类似的问题,因为我需要将包含目录提供给自定义目标。我的解决方案并不出色,但它似乎解决了手头的问题。我获得了包含目录中的路径,并将它们格式化为编译器所需的输入(在本例中为 ODB[1])。

    get_directory_property(dirs INCLUDE_DIRECTORIES)
    set(global_includes "")
    foreach(dir IN LISTS dirs)
        set(global_includes ${global_includes} -I ${dir})
    endforeach()

然后我在自定义目标的命令中使用了${global_includes}。我想搬到target_include_directories 的新世界,但在这种情况下还没有成功。

[1]https://www.codesynthesis.com/products/odb/download.xhtml

【讨论】:

  • 对于这个不清楚的问题,我很抱歉,我应该说我想提供通往 Visual Studio 的路径,以便 Intellisense 能够工作。编译步骤不是问题,只是 Visual Studio 几乎用红色突出显示每一行,因为它找不到头文件。我做了自己的研究,发现用 CMake 是不可能的,除非我制作一个脚本,在 CMake 生成后将包含路径插入到生成的 Visual Studio 项目文件中。这并不像最初看起来那么简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多