LINUX.ORG.RU

Проблемы переноса С++ из MS VS в LINUX - CLION

 ,


0

2

Процессы любого переноса программ с платформы на платформу хоть и противные, но необходимые. И, конечно, возникает множество вопросов. К сожалению опыт программирования в LINUX очень небольшой - поэтому извините за возможно дебильны вопросы.

  1. Как я могу на этапе предкомпиляции узнать режим Debug | Release?

  2. Как я могу на этапе предкомпиляции разрядность платформы?

Спасибо.


Ответ на: комментарий от ezus

тем, что в cmake вы по идее и должны настраивать различные профили сборки(-DCMAKE_BUILD_TYPE=Release), собственно при желании и установить разрядность, когда нужна отличная от родной. Eсли нужно просто узнать, то вот

AKonia ★★★
()
Последнее исправление: AKonia (всего исправлений: 2)
Ответ на: комментарий от AKonia

Спасибо. С разрядностью я разобрался. А вот с дебагом проблема, так как режим устанавливается средой CLION, а не мной в cmake

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

Ты можешь сам добавить такую макропеременную в Linux.

g++ -D _DEBUG main.cpp

или для CMake:

if (CMAKE_BUILD_TYPE MATCHES Debug)
    add_definitions(-D_DEBUG)
endif()
fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 1)

Конфигурация сборки зависит от переменных среды cmake определяемых автоматически cmake'ом, либо вручную пользователем. Узнать тип конфигурации можно с помощью переменной CMAKE_BUILD_TYPE. Вывести любую переменную на экран консоли можно с помощью команды message.

Например можно добавить в CMakeLists.txt

message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
Тогда на этапе генерации, можно будет увидить сообщение - CMAKE_BUILD_TYPE: (чему равна переменная). CMake документация.

Dr64h ★★★
()
Последнее исправление: Dr64h (всего исправлений: 1)
Ответ на: комментарий от Dr64h

Это работает, если используется генератор для make. С генератором для ninja не работает и приходится использовать generator expressions.

u-235
()
Ответ на: комментарий от u-235

Как не работает? У меня всё прекрасно выводится с обычным ninja. А вот если использовать «Ninja Multi-Config», то да там есть свои танцы с бубном. Тогда вместо CMAKE_BUILD_TYPE, можно использовать $<CONFIG>.

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

Это помогает задавать правильные вопросы. Например, вместо «Как я могу на этапе предкомпиляции узнать режим Debug | Release»? спросить «Как я могу узнать, какой режим (Debug | Release) был выбран во время настройки cmake?».

fluorite ★★★★★
()

Спасибо.

ezus
() автор топика
Ответ на: комментарий от Dr64h

вот если использовать «Ninja Multi-Config», то да там есть свои танцы с бубном

Да, я мультиконфиг имел ввиду. Вот эти пляски с single-config/multi-config в cmake реально бесят.

u-235
()

Еще один вопрос.

При переходе из MFC to STL я построил свою систему типов на базе size_t, а сейчас при переходе в линукс я наткнулся на тип size_type. Причем они есть оба. Вопрос: в чем разница между ними и взаимозаменяемые они или нет?

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

Вроде это просто

typedef std::size_t size_type
то есть, просто второе название для std::size_t. Так иногда делают для упрощения. Например можно вместо того же unsigned int использовать uint.

Кстати это излюбленный приём WinAPI разработчиков. К примеру -

typedef unsigned long DWORD
typedef DWORD *PDWORD
то есть PDWORD - это unsigned long int указатель.

Dr64h ★★★
()
Последнее исправление: Dr64h (всего исправлений: 1)
Ответ на: комментарий от Dr64h

Спасибо Именно этот typedef я ожидал, но не нашел.

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