LINUX.ORG.RU

cmake & qtcreator. Внезапные проблемы

 


0

1

Всем добрый день. Ситуацицию упростил до невозможного и не могу понять, что делать дальше. Имеем два участка кода

Первый участок, сборка сторонней библиотеки

add_library( glew STATIC ext/glew-2.0.0/src/glew.c)
target_include_directories(glew PUBLIC ext/glew-2.0.0/include/)

Второй участок, изменение пути сборки основного бинаря

set(EXECUTABLE_OUTPUT_PATH  ${CMAKE_CURRENT_LIST_DIR}/release)

Проблема в QtCreator. Если есть оба участка, то он перестает видеть сторонние хидеры(подчеркивает их, типа не нашел), однако собирает все без проблем.

Стоит убрать первый участок - хидеры появляются. Стоит убрать второй участок - хидеры тоже появляются. Когда они вместе - хидеров нет. А вот почему?

--------------------------------------------------------------

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

project(some)

add_library( glew STATIC ext/glew-2.0.0/src/glew.c)
target_include_directories(glew PUBLIC ext/glew-2.0.0/include/)

set(EXECUTABLE_OUTPUT_PATH  ${CMAKE_CURRENT_LIST_DIR}/release)

add_executable(some src/main.cpp)
target_include_directories(some PUBLIC glew ext/glm-0.9.8.4/)
target_link_libraries(some LINK_PUBLIC glew)

--------------------------------------------------------------

main.cpp

#include <GL/glew.h>
#include <glm/glm.hpp>

int main( void )
{
    return 0;
}

Вообще-то путь к исполняемому файлу указывается с помощью target property RUNTIME_OUTPUT_DIRECTORY.

LINK_PUBLIC

В документации написано это legacy.

target_include_directories(some PUBLIC glew ext/glm-0.9.8.4/)

Зачем это, если ниже используется target_link_libraries?

Dendy ★★★★★ ()
Ответ на: комментарий от Dendy

Вообще-то путь к исполняемому файлу указывается с помощью target property RUNTIME_OUTPUT_DIRECTORY.

Да, это работает. Ох уж этот deprecated. Спасибо огромное.

LINK_PUBLIC

В документации написано это legacy.

Забыл вернуть обратно. В попытках подружить qtcreator с cmake пытался творить неведомые вещи.

target_include_directories(some PUBLIC glew ext/glm-0.9.8.4/)

Зачем это, если ниже используется target_link_libraries?

Хороший вопрос. Только вчера наткнулся на такую возможность. Привык, что при find_package(<...>) заполняются <...>_INCLUDE_DIR и <...>_LIBRARIES. Вот и сделал по образу и подобию.

Можете еще один сильно надоевший момент подсказать? Как сделать так, чтобы открытии СMakeLists.txt QtCreator генерировал автоматом две сборки - release и debug? Каждый раз редактировать переменную в СMakeLists.txt не столь удобно.

Burns ()
Ответ на: комментарий от Burns

Можете еще один сильно надоевший момент подсказать? Как сделать так, чтобы открытии СMakeLists.txt QtCreator генерировал автоматом две сборки - release и debug? Каждый раз редактировать переменную в СMakeLists.txt не столь удобно.

он же вроде так и делает по дефолту? Открываете CMakeLists.txt, открывается экран «configure project». Выбираете кит, снимаете галки с ненужных сборок, и все, не нужно ничего редактировать.

anonymous ()
Ответ на: комментарий от Burns

Обнови креатор. Новый сам создает разные профили сборки, в том числе для ондроедов.

anonymous ()
Ответ на: комментарий от anonymous

Ах да, было такое дело. В настройках еще можно каталог сборки по умолчанию поменять, ранее я почему-то не задумывался об этом. Что-то затупил. Спасибо за ответы

Burns ()
Ответ на: комментарий от anonymous

В новой среде это все действительно удобно. Финальный штрих остается.

Не могу найти, как добавить опции сборки по умолчанию. Вот хочу я, чтобы на моей машине любой проект собирался в 5 потоков, но руками дописывать постоянно -j5 совсем не хочется. Где бы это указать по умолчанию?

Burns ()
Ответ на: комментарий от Burns

Локальный Makefile с нужным правилом и параметром -j N в нем.
Или просто -j без аргумента.

andreyu ★★★★★ ()
Ответ на: комментарий от Burns

Или в настройках параметров сборки проекта Projects->Build Settings (или Ctrl+5) добавить в «Build Steps», там где cmake --build . --target all в конце -- -j5

anonymous ()
Ответ на: комментарий от anonymous

Или в настройках параметров сборки проекта ... -j5

Вы неверно прочитали мой вопрос. Я не хочу этим заниматься для каждого проекта. Я спросил о глобальном параметре для всех проектов

Burns ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.