簡體   English   中英

跨平台開發?

[英]Cross-platform development?

我正在尋找一種解決方案,該解決方案允許我使用C ++為Linux和Windows進行編碼。

在Windows上,我使用Visual Studio(我在Windows上嘗試了其他方法,但我使用DirectX ,據我所知,這是最佳解決方案)。

在Linux上,我使用NetBeans (我非常喜歡)。

我的問題是我希望項目獨立於Visual Studio和NetBeans。

有一段時間我以為CMake是解決方案,但是學習過程太重要了,我寧願花時間在編碼上,也不願學習CMake的所有技巧。 所以我選擇了Boost.Jam 它在Linux上運行良好,但在Visual Studio上很爛。

我在Windows上創建了一個小的Hello World程序。 我創建了一個Visual Studio Makefile項目,並且該項目正在正確編譯和鏈接。 我可以運行可執行文件,但不能從Visual Studio運行,后者找不到可執行文件(無論我做什么)。 我也不能調試。 另外,我也看不到編譯錯誤消息。 從Visual Studio中可以看到的是,有一個makefile操作正在進行中,並且有一個錯誤(即使程序已創建並運行良好)。

我瀏覽了Boost.Jam文檔已有一段時間了,但讓我們面對現實吧,它相當糟糕(難怪沒有很多人聽說過),或者我不太適合這份工作(意思是愚蠢的笑聲,但是為什么?很少有人聽說過)。

我有三個問題:

我想知道是否有人聽說過在Visual Studio中使用Boost.Jam的項目嗎? 如果可以,我可以看看嗎?

有沒有與Visual Studio真正集成的工具?

有多少人認為學習(正確)使用CMake會花費很多時間? 有什么技巧可以加快速度嗎?

您應該花時間學習CMake並加快學習過程,購買/閱讀“精通CMake 4th Edition”

如果遇到問題,則應使用CMake 郵件列表 ,該列表處於活動狀態(2009年8月有600條消息)

Qt和Qt Creator看起來像是解決問題的好方法。 qmake可以生成vcproj文件和本機Linux makefile。

如果要用Windows和Linux的C ++編寫代碼,則要用linux編寫代碼,並將應用程序與最小的cygwin設置捆綁在一起。

您確定要查看正確的文檔嗎? 您說過“ Boost.Jam”,所以您看錯事情的機會很高。 請訪問Boost.Build文檔

我可以肯定地說,很多人在Visual Studio內部使用Boost.Build都不會出現問題。 您可以嘗試在命令行上運行該程序嗎?也許有些錯誤消息是Visual Studio決定不顯示的?

我也建議CMake。 起初有點嚇人,但是您可以逐步緩解它。 對於初學者來說,編寫跨平台腳本還是很容易的,即使它們不像專家那樣漂亮也不理想。 通過與CppUnit(用於單元測試)和Hudson(構建mgt)集成,可以立即配置持續集成框架。

我對NetBeans不太了解,但是如果您想同時為Windows和Linux開發並在Windows上使用Visual Studio,那么CMake確實是唯一明智的選擇 我已經使用了幾年了,我無法開始猜測它為我節省了多少時間來維護makefile和項目文件。

支持Ben。 我們有一個主要的供應商,它為舊版Unix代碼提供了Windows端口,以進行商品硬件訪問,而這正是他們所做的。

Emacs和GNU都可以在兩個平台上正常工作。 如果需要GUI,我將GTK +與MinGW / msys結合使用,而不是Cygnus和X端口。

幾個月前,我在Fosdem觀看了CMake演示,它看起來非常令人印象深刻。 我認為花時間學習它可能是值得的。

另一方面,根據我個人的經驗,每個平台維護單獨的項目文件是一種完全可以接受的處理方式。

使用CMake進行交叉編譯的唯一不平凡的事情是編寫工具鏈信息:CMake會找出其余的信息。 有關更多信息,請參見http://www.cmake.org/Wiki/CMake_Cross_Compiling#The_toolchain_file

我不知道您想要多么復雜,我在Linux上使用mingw-4.4.2 + cmake來編譯Windows的Qt4應用程序,並在wine上使用NSIS來創建安裝文件。 基本上,當我傳遞-DWin32 = 1時,我入侵了CMakeLists.txt以使用mingw。 這是相關的部分:

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完成的。

MPC ,“ Makefile,Project和Workspace Creator”,是另一個可能對您有用的工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM