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