2016-05-03 4 views
0

cmake 3.5.
Я пробовал следующий код в моем проекте CMake. Скажем SUBDIRS содержит список каталогов:Cmake, include_directories в цикле foreach() не работает

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

Что вы подразумеваете под "не работает"? Что вы ожидаете, что происходит. Очевидно, что 'include_directories (" путь/to/dir1 путь/to/dir2 ")' неверно, поскольку вы передаете только один аргумент и это не допустимый путь. – usr1234567

+0

Я за исключением всех каталогов, которые будут включены после директивы 'include_directories()'. – hudac

+0

Укажите фактические пути, которые вы хотите добавить. Они содержат пробелы? Какой результат вы получаете? – usr1234567

ответ

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, хотя вы можете процитировать отдельные записи в списке.

+0

Отказ от работы: O: O: O – hudac

+0

Вы можете попробовать добавить другое' message() ' вызов внутри цикла, но вне части 'if (IS_DIRECTORY)'. Это даст вам знать, работает ли цикл правильно или нет. Мое лучшее предположение заключается в том, что пути к каталогам в 'SUBDIRS' неверны.Вы можете указать их относительно текущего каталога cmake. Например, вместо 'path/to/dir1', do' $ {CMAKE_CURRENT_SOURCE_DIR}/path/to/dir1' –

+0

Я не знаю, что сказать, это не сработает ... – hudac

Смежные вопросы