Кроссплатформенная разработка? - PullRequest
1 голос
/ 17 сентября 2009

Я ищу решение, которое позволило бы мне кодировать для Linux и Windows, используя C ++.

В Windows я использую Visual Studio (я пробовал другие вещи в Windows, но я работаю с DirectX и, насколько мне известно, это лучшее решение).

В Linux я использую NetBeans (что мне очень нравится).

Моя проблема в том, что я хочу, чтобы проект не зависел от Visual Studio и NetBeans.

Некоторое время я думал, что CMake было решением, однако процесс обучения слишком важен, я скорее трачу свое время на программирование, чем на изучение всех приемов с CMake. Поэтому я согласился на Boost.Jam . Он отлично работал в Linux, но не работал с Visual Studio.

Я создал небольшую программу Hello World в Windows. Я создал проект Visual Studio Makefile и пока он правильно компилируется и связывается. Я могу запустить исполняемый файл, но не из Visual Studio, которая не может найти исполняемый файл (независимо от того, что я делаю). Я тоже не могу отладить. Также я не вижу сообщение об ошибке компиляции, когда я его получаю. Все, что я вижу в Visual Studio, - это то, что выполняется действие make-файла и что в нем есть ошибка (даже если программа создана и работает нормально).

Я какое-то время просматривал документацию Boost.Jam, но давайте посмотрим правде в глаза, она довольно бедная (неудивительно, что об этом не слышали многие), или я совсем не подходит для этой работы (то есть глупо, LOL но все же почему так мало об этом слышали).

У меня три вопроса:

Я хотел бы знать, слышал ли кто-нибудь о проекте, использующем Boost.Jam с visual studio? Если да, могу я взглянуть на это?

Существует ли инструмент с реальной интеграцией Visual Studio?

Сколько людей считают, что обучение использованию CMake (правильно) стоит много времени? Какие-нибудь хитрости, чтобы ускорить?

Ответы [ 11 ]

12 голосов
/ 17 сентября 2009

Вам нужно время, чтобы выучить CMake и ускорить процесс обучения купить / прочитать "Освоение CMake 4-е издание"

Если у вас есть проблемы, вы должны использовать список рассылки CMake , который активен (в августе 2009 г. было около 600 сообщений)

5 голосов
/ 18 сентября 2009

Qt и Qt Creator выглядят как хорошее решение вашей проблемы. qmake может генерировать файлы vcproj и собственные make-файлы Linux.

4 голосов
/ 17 сентября 2009

Если бы я писал код на C ++ для Windows и Linux, я бы написал код для Linux и включил приложение с минимальной настройкой Cygwin.

3 голосов
/ 02 октября 2009

Я бы тоже порекомендовал CMake. Поначалу это немного страшно, но ты постепенно облегчаешься. Для начинающего все еще довольно легко писать кроссплатформенные сценарии, даже если они не симпатичны и не оптимальны, как это сделал бы эксперт. Интеграция с CppUnit (для модульных тестов) и Hudson (build mgt) позволила быстро настроить инфраструктуру непрерывной интеграции.

3 голосов
/ 18 сентября 2009

Вы уверены, что смотрите правильную документацию? Вы сказали «Boost.Jam», поэтому высоки шансы, что вы смотрите не на то. Пожалуйста, посетите Boost. Строительная документация

Я уверен, что многие люди использовали Boost.Build внутри Visual Studio без проблем. Можете ли вы попробовать запустить программу из командной строки - возможно, есть какое-то сообщение об ошибке, которое Visual Studio решает не показывать?

2 голосов
/ 19 сентября 2009

Я не знаю много о NetBeans, но если вы хотите разрабатывать как для Windows, так и для Linux и использовать Visual Studio для Windows, тогда CMake - единственный разумный выбор , на самом деле. Я использую его уже несколько лет, и я не могу догадаться, сколько времени это сэкономило мне, поддерживая make-файлы и файлы проекта.

1 голос
/ 17 ноября 2009

MPC , "Makefile, Project и Workspace Creator", - это еще один инструмент, который может быть вам полезен.

1 голос
/ 17 ноября 2009

Я не знаю, насколько сложным вы хотите стать, я использую mingw-4.4.2 + cmake на linux для компиляции моих приложений Qt4 для Windows и NSIS на Wine для создания установочных файлов. В основном я взломал свой CMakeLists.txt, чтобы использовать mingw, когда я передаю -DWin32 = 1. вот подходящая часть:

if(WIN32) 
    SET(CMAKE_BUILD_TYPE "Release") #force release for win32, no motive to debug on win32

    SET(CMAKE_CXX_FLAGS_RELEASE  "-march=pentium4 -mtune=pentium4 -mwindows -DNDEBUG -mno-align-stringops -minline-stringops-dynamically -fno-ident -freorder-blocks-and-partition -finline-limit=700 -mfpmath=sse  -ftree-loop-distribution -floop-block -floop-interchange -floop-strip-mine -findirect-inlining -ftree-switch-conversion ${BASE_CXX_FLAGS}")

    SET(WIN32_BASE /home/win32-devel)
    SET(QT_LIB ${WIN32_BASE}/qt-win-opensource-src-4.5.3/lib/)

    SET(CMAKE_CXX_COMPILER i686-pc-mingw32-g++)
    SET(CMAKE_AR i686-pc-mingw32-ar)
    SET(CMAKE_RANLIB  i686-pc-mingw32-ranlib)
    SET(CMAKE_LINKER i686-pc-mingw32-ld)

    ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/app_icon.o
                        COMMAND i686-pc-mingw32-windres
                            -I${CMAKE_CURRENT_SOURCE_DIR}
                            -o${CMAKE_CURRENT_BINARY_DIR}/app_icon.o
                            -i${CMAKE_CURRENT_SOURCE_DIR}/icons/win32_icon.rc
                        )

    SET(OPENSSL_LIBRARIES  ${WIN32_BASE}/openssl-0.9.8l/libeay32.dll;${WIN32_BASE}/openssl-0.9.8l/libssl32.dll)
    SET(QT_LIBRARIES  ${QT_LIB}QtCore4.dll;${QT_LIB}/QtGui4.dll)
    SET(CMAKE_EXECUTABLE_SUFFIX ".exe")

    include_directories(${CMAKE_CURRENT_BINARY_DIR} ${QT_LIB}../include ${WIN32_BASE}/openssl-0.9.8l/include)
    message("Building For   : Win32")
else()
    include_directories(${CMAKE_CURRENT_BINARY_DIR} ${QT_INCLUDES} ${OPENSSL_INCLUDE_DIR})
    message("Building For   : Linux")
endif()
SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "-Wl,--no-undefined -static-libgcc -Wl,-O1 -Wl,--as-needed -Wl,--sort-common -s")

редактировать: Забыл упомянуть, что фактическая разработка выполняется с использованием KDevelop 4.

1 голос
/ 10 ноября 2009

Единственная нетривиальная вещь об использовании CMake для кросс-компиляции - это запись информации о цепочке инструментов: CMake вычисляет все остальное. См. http://www.cmake.org/Wiki/CMake_Cross_Compiling#The_toolchain_file для получения дополнительной информации.

1 голос
/ 17 октября 2009

Я видел демо CMake на Fosdem несколько месяцев назад, и оно выглядело довольно впечатляюще. Я думаю, что время, потраченное на изучение, может стоить.

С другой стороны, по моему личному опыту, ведение отдельных файлов проекта для каждой платформы является вполне приемлемым способом ведения дел.

...