CMake include_directories用于自定义目标类型

时间:2017-11-24 14:55:34

标签: cmake

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

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

如果我尝试将include目录添加到当前目标,我会遇到以下错误:

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的发生器,但它很实验性,在我的情况下不起作用。

1 个答案:

答案 0 :(得分:0)

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