CMake set_target_properties и include_directories свойства и include_directories

#c #visual-studio-2010 #cmake

#c #visual-studio-2010 #cmake

Вопрос:

Мой вопрос в значительной степени связан с этим (оставшимся без ответа) вопросом в списке рассылки CMake.

По сути, я хочу знать о поведении include_directories за кулисами генератора Visual Studio 2010; перезаписываются ли каталоги из предыдущих вызовов include_directories при выполнении этого:

 set_target_properties(${Target} PROPERTIES COMPILE_FLAGS /I${some_directory})
  

В комментариях к списку рассылки говорится «этого не должно быть», но, похоже, я наблюдаю именно такое поведение. Я понимаю, что проекты в VS2010 немного сложнее, но я не могу найти окончательного ответа. Может ли это быть просто ошибкой с генератором 2010?

Я использую Visual Studio 2010 с пакетом обновления 1 и CMake 2.8.4

Комментарии:

1. Почему вы хотите добавить эту строку? Почему это include_directories не подходит для вас?

2. @Naszta эта строка также используется для указания других флагов компилятора, а не только /I. Кажется, что когда я использую это с / I, CMake забывает все, что ранее было установлено с помощью include_directories

3. Хорошо, я это понимаю. Вы все еще используете его? Почему это большая проблема? Вы могли бы использовать include_directories правильно для определения путей включения. Почему вы предпочитаете set_target_properties(${Target} PROPERTIES COMPILE_FLAGS /I${some_directory}) ?

4. @Naszta Я поддерживаю модули, написанные не мной, которые используют этот метод. Я решил проблему, написав несколько макросов для разрешения зависимостей includes и добавления их в качестве флагов вместо смешивания использования COMPILE_FLAGS и include_directories. Ваши комментарии были полезными, поэтому я отмечу их как ответы.

Ответ №1:

Я не видел вашего CMakeLists.txt но хорош ли порядок включаемых путей? Я думаю, что порядок включаемых путей не определен, если вы делаете это таким образом. Смотрите: /I параметр компилятора, документацию по set_target_properties и include_directories.