forema()循环中的Cmake,include_directories不起作用

时间:2016-05-03 06:07:16

标签: cmake

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

1 个答案:

答案 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设置的值列表周围加上引号,尽管您可以引用列表中的各个条目。