Миграция среды разработки для использования CMake + Git

0

В настоящее время я пытаюсь изучить передовую практику для кросс-платформенной разработки, чтобы обеспечить лучшую производительность в будущих проектах. Я начал с базовой установки, используя терминал unix на OS X и Linux. Затем я использовал комбинацию среды Cygwin с компилятором MinGW GCC для окон. Затем все было создано из универсального make файла (см. Ниже), который использовал бы rsync как базовую форму управления версиями, связанную с центральным репозиторием.

Моя текущая структура каталога проекта:

project_root
  include
  src
    makefile
  platform
    win
      build
        resources (Media)
        shaders (GLSL Shaders)
      include (platform specific include)
      lib (platform specific libraries)
      object
    mac
      build
        resources
        shaders
      include
      lib
      object
  resources
  shaders

и make файл выглядит так:

PROJECT_NAME := craft


UNAME := $(shell uname)

OS_TYPE     := WINDOWS
EXE         := .exe
DIR         := win
LDFLAG      := -Wall -g -std=c++11 -mwindows -static -L../platform/$(DIR)/lib -lstdc++ -lgdi32 -lglew -lglfw3 -lopengl32
CXXINCLUDE  := -I../platform/$(DIR)/include
LD          := i686-w64-mingw32-gcc
CXX         := i686-w64-mingw32-gcc

ifeq ($(UNAME), Darwin)
OS_TYPE     := MACINTOSH
EXE         := 
DIR         := mac
LDFLAG      := -Wall -g -std=c++11 -L../platform/$(DIR)/lib -lstdc++ -lglfw3 -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo
CXXINCLUDE  := -I../platform/$(DIR)/include
LD          := clang
CXX         := clang
endif

CXXFLAG     := -Wall -g -I../include
CU          := nvcc
CPP_FILES   := $(wildcard *.cpp)
OBJ_FILES   := $(CPP_FILES:.cpp=.o)

all: build

build: $(OBJ_FILES)
    $(LD) -o ../platform/$(DIR)/build/$@$(EXE) $(addprefix ../platform/$(DIR)/object/, $^) $(LDFLAG)

%.o: %.cpp
    $(CXX) -o ../platform/$(DIR)/object/$@ -c $< $(CXXFLAG) $(CXXINCLUDE)

platform:
    echo $(OS_TYPE)

clean: clobject
    rm -rf ../platform/$(DIR)/build/build$(EXE)

clobject:
    rm -rf ../platform/$(DIR)/object/*.o

resources:
    rsync -va --delete ../resources ../platform/$(DIR)/build/

shaders:
    rsync -va --delete ../shaders ../platform/$(DIR)/build/

run:
    ../platform/$(DIR)/build/build$(EXE)

send:
    rsync -va --delete $(DEV)/$(PROJECT_NAME) $(DEV_MASTER)

get:
    rsync -va --delete $(DEV_MASTER)/$(PROJECT_NAME) $(DEV)

Это нормально для любых базовых проектов, но у него есть проблемы, и я хотел бы, например, использовать MSVC в окнах, а не в GCC. Я был бы очень признателен за любые советы по настройке среды и рабочим процессам/инструментам для использования?

Желательно я хотел бы:

  • Использовать собственные компиляторы для каждой системы (Win: MSVC, Mac: Clang, Lin: GCC).
  • Возможно ли установить базовую настройку CMake, которая будет работать с моей текущей файловой структурой?
  • Работайте с одной командной оболочки, которая может запускать Git (вместо rsync), CMake и использовать сгенерированный файл для создания исполняемого файла. Предпочтительно использовать команды unix, а не DOS.

Это довольно просто при использовании систем на основе nix, но, например, с окнами, можно ли использовать Git Bash без использования Visual Studio Command Prompt для запуска makefile/ninja, который использует cl.exe? Или было бы лучше просто использовать.vcprog?

Теги:
cmake
cross-platform
development-environment

1 ответ

1
Лучший ответ

Да, это очень удобно и на самом деле довольно прямолинейно.

Все, что вы хотите, должно быть охвачено основными примерами cmake.

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

  • 0
    Я почти преобразовал это сейчас, я понимаю ту платформу, если заявления все еще необходимы. Это легко, когда вы привыкнете к командам find_package / library. Я также извлек каталог сборки из src, что делает его более чистым для отправки на github, ура.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню