1

我正在寻找一种允许我使用 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 文档已经有一段时间了,但让我们面对现实吧,它很差(难怪没有很多人听说过)或者我很不适合这份工作(意思是愚蠢的哈哈,但为什么很少有人听说过)。

我有三个问题:

我想知道是否有人听说过使用 Boost.Jam 和 Visual Studio 的项目?如果是,我可以看看吗?

是否有与真正的 Visual Studio 集成的工具?

有多少人认为学习(正确地)使用 CMake 会花费很多时间?有什么加速技巧吗?

4

11 回答 11

12

您应该花时间学习 CMake 并加快学习过程 购买/阅读“Mastering CMake 4th Edition”

如果你有问题,你应该使用 CMake邮件列表,它是活跃的(2009 年 8 月有大约 600 条消息)

于 2009-09-17T19:24:58.083 回答
5

Qt 和 Qt Creator 看起来可以很好地解决您的问题。qmake 可以生成 vcproj 文件和原生 Linux makefile。

于 2009-09-17T20:48:25.153 回答
4

如果我要为 Windows 和 linux 编写 C++ 代码,我会为 linux 编写代码,并将应用程序与最小的 cygwin 设置捆绑在一起。

于 2009-09-17T19:10:56.207 回答
3

您确定您正在查看正确的文档吗?你说过“Boost.Jam”,所以你看错东西的机会很高。请访问Boost.Build 文档

我确信很多人在 Visual Studio 中使用 Boost.Build 时都没有问题。您可以尝试在命令行上运行该程序吗?也许有一些 Visual Studio 决定不显示的错误消息?

于 2009-09-18T08:11:22.167 回答
3

我也推荐 CMake。一开始有点吓人,但你会逐渐适应它。初学者编写跨平台脚本仍然相当容易,即使它们不像专家那样漂亮或最佳。与 CppUnit(用于单元测试)和 Hudson(构建 mgt)的集成使得可以立即配置持续集成框架。

于 2009-10-01T21:36:24.307 回答
2

我对 NetBeans 了解不多,但如果你想同时为 Windows 和 Linux 开发并在 Windows 上使用 Visual Studio,那么CMake 是唯一明智的选择,真的。我已经使用它好几年了,我无法猜测它为我维护 makefile 和项目文件节省了多少时间。

于 2009-09-19T07:22:55.417 回答
1

为本投票。我们有一个主要的供应商,他们将他们的旧 Unix 代码移植到 Windows 上以用于商品硬件访问,而这正是他们所做的。

Emacs 在这两个平台上都能正常工作,GNU 也一样。如果您需要 GUI,我会使用带有MinGW/msys的 GTK+,而不是 Cygnus 和 X 端口。

于 2009-09-17T19:29:56.217 回答
1

几个月前我在 Fosdem 看过一个 CMake 演示,它看起来非常令人印象深刻。我认为花时间学习它可能是值得的。

另一方面,根据我的个人经验,为每个平台维护单独的项目文件是一种完全可以接受的做事方式。

于 2009-10-16T23:12:56.720 回答
1

使用 CMake 进行交叉编译的唯一重要的事情是编写工具链信息:CMake 计算出其余部分。有关详细信息,请参阅http://www.cmake.org/Wiki/CMake_Cross_Compiling#The_toolchain_file

于 2009-11-10T02:57:57.817 回答
1

我不知道你想要多复杂,我在 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 完成的。

于 2009-11-16T21:57:05.910 回答
1

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

于 2009-11-16T23:33:08.457 回答