自定义目标类型的 CMake include_directories

标签 cmake

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

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

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

target_include_directories called with non-compliant target type.

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

编辑:

为了回答评论,我正在生成 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 生成器,但它是非常实验性的,在我的情况下不起作用。

最佳答案

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

关于自定义目标类型的 CMake include_directories,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47475731/

相关文章:

visual-studio-2010 - find_package() 在 Windows Cmake 上没有检测到 boost

CMake install TARGETS 给定的目标不是可执行文件、库或模块

c++ - CMake:如何更改子目录项目目标的属性?

c++ - bitbake grpc 交叉编译/配置失败,出现错误 c-ares::cares 引用文件/usr/lib/libcares.so.2.2.0

海湾合作委员会 : undefined reference to "__asan_init_v1"

c++ - 在 Windows 上从源安装 GLFW

c++ - CMake 设置默认资源/ Assets 目录

cmake - 如何在CMake中调用名称存储在变量中的函数

cmake - 使用 GRAPHVIZ_CUSTOM_TARGETS=TRUE 生成自定义目标的依赖关系图

testing - make test后如何强制cmake写入测试输出