我有一个带有.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的生成器,但它是相当实验性的,在我的情况下不工作。
2条答案
按热度按时间3bygqnnd1#
我也遇到过类似的问题,我需要为自定义目标提供include目录。我的解决方案并不高明,但似乎解决了手头的问题。我获得了include目录中的路径,并将它们格式化为编译器所需的输入(在本例中为ODB[1])。
然后,我在自定义目标的命令中使用了
${global_includes}
。我想移动到target_include_directories
的新世界,但还没有设法使它在这个场景中工作。[1][https://www.codesynthesis.com/products/odb/download.xhtml](https://www.codesynthesis.com/products/odb/download.xhtml)
gfttwv5a2#
如果有人有兴趣让这个工作,这里有一个简单的食谱,这是类似于我提出的here。
1.定义一个变量以存储所需的包含路径(示例):
1.在
${CMAKE_BINARY_DIR}
中为C/C++创建一个简单的${CMAKE_PROJECT_NAME}.vcxproj.user
模板xml文件:1.最后,为您需要的任何目标配置模板:
模板名称,模板目录,所有以
my_
开头的变量,甚至步骤都可以用几种方式修改。最后,唯一重要的是,为您的自定义目标存在包含上述xml内容的xml文件${CMAKE_CURRENT_BINARY_DIR}/${my_target}.vcxproj.user
。