Cmake - 如何将源文件注入子目录项目
Posted
技术标签:
【中文标题】Cmake - 如何将源文件注入子目录项目【英文标题】:Cmake - how to inject source file into subdirectory project 【发布时间】:2015-07-29 11:48:43 【问题描述】:我有一个利用另一个 cmake 库项目的 cmake 项目,目录如下所示:
/CMakeList.txt
/main.c
/.gitmodules
/patch/patch.c
/vendor/CMakeList.txt
/vendor/vendor.c
/vendor/...
在/CMakeList.txt
中,我使用add_subdirectory(vendor)
将供应商库包含/链接到我自己的项目。
在/vendor/CMakeList.txt
中,源文件由FILE(GLOB SRC_VEN vendor.c ...)
添加
我想将/patch/patch.c
注入vendor
库而不接触/vendor
目录,这是一个git 子模块
是否可以在我的根 CMakeList.txt 中使用 cmake 来实现这一点?
谢谢!
【问题讨论】:
/vendor/CMakeList.txt
的真实样子如何?它不是在FILE(GLOB ...)
中使用通配符吗?你是什么意思“不接触”?是否可以自动更改任何文件?
在你的add_subdirectory(vendor)
电话之后像target_sources(vendor_target PRIVATE "patch/patch.c")
之类的东西?但是您需要知道要注入的目标名称(vendor_target
只是一个占位符)。有关详细信息,请参阅here。
嗨@m.s。感谢您的回复,是的/vendor/CMakeLists.txt
使用通配符,我提到了“无触摸”供应商,因为我可以稍微修改/vendor/CMakeLists.txt
,并在我的.gitmodules
中修改ignore=dirty
,这样就不会提交更改
谢谢你,@Florian!刚刚测试,target_sources 就像一个魅力
【参考方案1】:
把我的评论变成答案
如果您想将源代码注入现有目标,您可以使用target_sources()(在 CMake 版本 3.1 中引入)。
在你的情况下,这看起来像:
/CMakeLists.txt
...
add_subdirectory(vendor)
target_sources(vendor_target PRIVATE "patch/patch.c")
我把vendor_target
作为占位符。请将其替换为您要注入源的目标的真实名称。
有关详细信息,请参阅例如here.
【讨论】:
以上是关于Cmake - 如何将源文件注入子目录项目的主要内容,如果未能解决你的问题,请参考以下文章