gpt4 book ai didi

c++ - 在 CMake 中,将属性(查找包含的目录)注入(inject)到依赖于给定 header 的文件

转载 作者:行者123 更新时间:2023-11-30 02:43:27 25 4
gpt4 key购买 nike

[我找不到如何正确地向谷歌提问我的问题,所以我在这里]

我的项目大致是这样组织的:

Project/
+ Sources/
| + foo1/ # foo1 is a library
| | + bar/
| | + config.in.h
| | + bar.h # includes config.h
| | + bar.cpp # includes bar.h
| + foo2/
| ...
| + foon/
| + Tests/
| + foo1/
| + bar/
| + test-bar.cpp # includes bar.h
+ Build-debug/
+ foo1/bar/config.h # <-- generated from config.h.in

bar.h包含config.h,它是从config.in.h生成的。而bar.h包含在bar.cpptest-bar.cpp中。

我正在寻找的是一种方法来指定所有依赖于(即直接或间接包含)bar.h 的文件,无论它们位于哪个目录,都应添加 ${PROJECT_BINARY_DIR}/foo1/bar 到编译时包含的目录。

到目前为止,我已经尝试了

的变体
set_property(
SOURCE bar.h
APPEND_STRING
PROPERTY INCLUDE_DIRECTORIES ${CMAKE_CURRENT_BINARY_DIR})

但没有成功。

我想要实现的目标是否可行?如果是这样,怎么做?

最佳答案

改为在 bar 目标上指定使用要求:

http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#build-specification-and-usage-requirements

查看可能的重复项:

CMake target_link_libraries Interface Dependencies

Possible to add an imported library to target_link_libraries that takes care of include directories too?

Getting the compiler to find a Cmake-created file

更新:正如你所说它是私有(private)的,你可以这样做:

add_library(bar ...) # Whatever
add_library(barPrivate INTERFACE)
target_include_directories(barPrivate
INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
)
target_link_libraries(barPrivate INTERFACE bar)

然后使用

target_link_libraries(the_test barPrivate)

而不是链接到栏。

无论如何,我对您的隐私声明持怀疑态度,$ 生成器表达式可用于区分构建目录和安装位置使用要求。

http://www.cmake.org/cmake/help/v3.0/manual/cmake-generator-expressions.7.html

关于c++ - 在 CMake 中,将属性(查找包含的目录)注入(inject)到依赖于给定 header 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26123153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com