CMake:如何获取目录的所有子目录的名称?
我有两个与 CMake 相关的问题
假设我们有一个变量
${MY_CURRENT_DIR}
,其中包含包含多个子目录的目录的路径:mydir1、mydir2 和 mydir3。我想检测这些子目录并将它们的名称放入${SUBDIRS}
(不是这些目录的完整路径,只有它们的名称)。如何自动执行此操作?假设
${SUBDIRS}
包含“mydir1 mydir2 mydir3”。如何更换ADD_SUBDIRECTORY(mydir1) ADD_SUBDIRECTORY(mydir2) ADD_SUBDIRECTORY(mydir3)
用 ${SUBDIRS}
上的循环替换?
I have two questions relative to CMake
Assume that we have a variable
${MY_CURRENT_DIR}
that contains the path of a directory that contains several subdirectories : mydir1, mydir2 and mydir3. I want to detect these subdirectories and put their names into${SUBDIRS}
(not the complete path of these directories, only their name). How to do that automatically ?Assume that
${SUBDIRS}
contains "mydir1 mydir2 mydir3". How to replaceADD_SUBDIRECTORY(mydir1) ADD_SUBDIRECTORY(mydir2) ADD_SUBDIRECTORY(mydir3)
by a loop over ${SUBDIRS}
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用这个宏:
示例:
使用
foreach
:Use this macro:
Example:
Use
foreach
:对于现代更简单的解决方案,请尝试这个
对于 cmake 3.7 及更高版本,GLOB 模块有一个 LIST_DIRECTORIES 选项
此链接解释了 glob 模式
For a modern simpler solution try this
For cmake 3.7 and above the GLOB module got a LIST_DIRECTORIES option
This link explains glob patterns
关于上面的回答:
使用这个宏:
示例:
我在使用这个 FILE(GLOB 命令时遇到了问题。(我使用的是 cmake 3.17.3)
否则宏效果很好。
我收到 FILE GLOB 错误,例如“FILE GLOB 在目录后面需要一个 glob 表达式”。 (也许它不喜欢 RELATIVE 和/或只使用 curdir 作为第四个参数。)
我必须使用:(
取出 RELATIVE 和第一个 ${curdir}
(请注意我上面的 cmake 版本,这可能是我的问题(到目前为止我还不熟悉 glob。)。)
In regard to answer above:
Use this macro:
Example:
I had trouble with this FILE(GLOB command. (I'm on cmake 3.17.3)
Otherwise the macro works great.
I was getting FILE GLOB errors, something like "FILE GLOB requires a glob expression after the directory." (Maybe it didn't like RELATIVE and/or just using the curdir as the fourth paramter.)
I had to use:
(taking out RELATIVE and the first ${curdir}
(Please note my cmake version above, that could've been my issue (I'm unfamiliar with glob so far.).)
@refaim 答案对 CMake 3.21.1 不起作用,我必须做一些小更改:
@refaim answer didn't work for me with CMake 3.21.1, I had to do small changes: