cmake 3.5
。
我在我的CMake项目中尝试了以下代码。
让我们说SUBDIRS
包含目录列表:
1
foreach(subdir ${SUBDIRS})
if(IS_DIRECTORY ${subdir})
MESSAGE( STATUS "Including dir " ${subdir} )
include_directories(${subdir})
endif()
endforeach()
2
set(include_dirs "")
foreach(subdir ${SUBDIRS})
if(IS_DIRECTORY ${subdir})
list(APPEND include_dirs ${subdir})
endif()
endforeach()
include_directories(${include_dirs})
3
set(include_dirs "")
foreach(subdir ${SUBDIRS})
if(IS_DIRECTORY ${subdir})
set(include_dirs "${include_dirs} ${subdir}")
endif()
endforeach()
include_directories(${include_dirs})
上述源代码均无效 看起来我必须具体声明每条路径:
include_directories(path/to/dir1
path/to/dir2
...)
我注意到了
include_directories("path/to/dir1" "path/to/dir2")
与相比,也有效
include_directories("path/to/dir1 path/to/dir2")
哪个不起作用。我认为它反映了foreach()
问题。
有什么建议吗? 感谢。
-----------编辑-----------
来自1.
:MESSAGE( STATUS "Including dir " ${subdir} )
的消息提供了输出:
including dir path/to/dir1
including dir path/to/dir2
答案 0 :(得分:1)
你的第一个代码片段看起来不错,我在一段时间前写过的项目中检查了一些CMake代码,看起来几乎完全相同。
foreach(subdir ${SUBDIRS})
if(IS_DIRECTORY ${subdir})
MESSAGE( STATUS "Including dir " ${subdir} )
include_directories(${subdir})
endif()
endforeach()
我最好的猜测是你错误地设置了SUBDIRS变量。
尝试做类似的事情:
set(SUBDIRS
path/to/dir1
path/to/dir2
)
然后看看循环是否有效。如果是这样,它可能是变量值的问题。请确保不要在SUBDIRS设置的值列表周围加上引号,尽管您可以引用列表中的各个条目。