Pregunta

Estoy buscando una solución que me permita codificar para Linux y Windows usando C ++.

En Windows uso Visual Studio (probé otras cosas en Windows pero trabajo con DirectX y que yo sepa, es la mejor solución).

En Linux uso NetBeans (que me gusta mucho).

Mi problema es que quiero que el proyecto sea independiente de Visual Studio y NetBeans.

Por un tiempo pensé que CMake era la solución, sin embargo, el proceso de aprendizaje también lo es importante, prefiero pasar mi tiempo codificando que aprendiendo todos los trucos con CMake. Así que me decidí por Boost.Jam . Funcionó bien en Linux pero apestaba con Visual Studio.

Creé un pequeño programa Hello World, en Windows. Creé un proyecto de Visual Studio Makefile y mientras compila y vincula correctamente. Puedo ejecutar el ejecutable pero no desde Visual Studio, que no puede encontrar el ejecutable (no importa lo que haga). Yo tampoco puedo depurar. Además, no puedo ver el mensaje de error de compilación cuando recibo uno. Todo lo que puedo ver de Visual Studio es que hay una acción de archivo MAKE en progreso y que hay un error al respecto (a pesar de que el programa está creado y funciona bien).

He estado navegando por la documentación de Boost.Jam durante un tiempo, pero seamos sinceros, es bastante pobre (no es de extrañar que no mucha gente haya oído hablar de ella) o no soy adecuada para el trabajo (lo que significa estúpido jajaja) pero aún así, ¿por qué tan pocos oyeron hablar de él?).

Tengo tres preguntas:

Me gustaría saber si alguien escuchó de un proyecto que usa Boost.Jam con Visual Studio. En caso afirmativo, ¿puedo echarle un vistazo?

¿Existe alguna herramienta con integración real de Visual Studio?

¿Cuántas personas piensan que aprender a usar CMake (correctamente) cuesta mucho tiempo? ¿Algún truco para acelerar?

¿Fue útil?

Solución

Debería tomarse el tiempo para aprender CMake y acelerar el proceso de aprendizaje comprar / leer " Mastering CMake 4th Edition "

Si tiene problemas, debe utilizar la CMake lista de correo , que es activo (agosto de 2009 tenía ~ 600 mensajes)

Otros consejos

Qt y Qt Creator parecen una buena solución a su problema. qmake puede generar archivos vcproj y makefiles nativos de Linux.

Si tuviera que codificar en C ++ para Windows y Linux, codificaría para Linux y agruparía la aplicación con una configuración mínima de cygwin.

¿Estás seguro de que estás mirando la documentación correcta? Has dicho "Boost.Jam", por lo que hay muchas posibilidades de que estés mirando algo incorrecto. Visite documentación de Boost.Build

Estoy seguro de que muchas personas usaron Boost.Build dentro de Visual Studio sin problemas. ¿Puedes intentar ejecutar el programa en la línea de comandos? ¿Tal vez hay algún mensaje de error que Visual Studio decide no mostrar?

También recomendaría CMake. Al principio da un poco de miedo, pero te relajas progresivamente. Todavía es bastante fácil para un principiante escribir scripts multiplataforma, incluso si no son bonitos u óptimos como lo haría un experto. La integración con CppUnit (para pruebas unitarias) y Hudson (build mgt) permitió configurar un marco de integración continua en muy poco tiempo.

No sé mucho sobre NetBeans, pero si desea desarrollar para Windows y Linux y usar Visual Studio en Windows, entonces CMake es la única opción sensata , realmente. Lo he usado durante varios años y no puedo comenzar a adivinar cuánto tiempo me ha ahorrado mantener archivos MAKE y archivos de proyecto.

Voto a favor de Ben. Tenemos un proveedor importante que hizo un puerto de Windows de su antiguo código Unix para acceder al hardware básico, y eso es exactamente lo que hicieron.

Emacs funciona bien en ambas plataformas, como lo hace GNU. Si necesita una GUI, usaría GTK + con MinGW / msys en lugar de Cygnus y un puerto X.

Hace unos meses, vi una demostración de CMake en Fosdem y me pareció bastante impresionante. Creo que el tiempo dedicado a aprender puede valer la pena.

Por otro lado, es mi experiencia personal que mantener archivos de proyecto separados por plataforma es una forma perfectamente aceptable de hacer las cosas.

Lo único no trivial sobre el uso de CMake para la compilación cruzada es escribir la información de la cadena de herramientas: CMake descubre el resto. Consulte http://www.cmake.org/Wiki/CMake_Cross_Compiling#The_toolchain_file para obtener más información información.

No sé qué tan complejo quieres ser, utilizo mingw-4.4.2 + cmake en Linux para compilar mis aplicaciones Qt4 para Windows y NSIS en Wine para crear los archivos de configuración. Básicamente pirateé mi CMakeLists.txt para usar mingw cuando paso -DWin32 = 1. Aquí está la parte relevante:

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")

editar: Olvidé mencionar que el desarrollo real se realiza usando KDevelop 4.

MPC , " Makefile, Project y Workspace Creator " ;, es otra herramienta eso podría ser útil para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top