我应该如何在github上设置c++项目,使其可移植

How should I setup a C++ project on github so that it is portable?

本文关键字:项目 可移植 c++ 设置 github 我应该      更新时间:2023-10-16

我想在GitHub上启动一个c++项目,这样我就可以在不同的操作系统(例如,OSX和unix)上克隆/构建。需要安装很多依赖项(例如curl、libxml2等),并且我希望尽可能避免用户需要手动在系统上安装深度包。这可能吗?

这取决于你想咬多少。

简短的回答是让CMake完成工作。它将为任何平台生成项目,并且它们应该是可用的。您不需要来为此分发二进制文件,假设它们对您(以及通过扩展对他们)是可用的。

下面是我在一个项目中使用的设置sqlite、boost和eigen的示例。

cmake_minimum_required(VERSION 2.8)
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Modules)
# boost
find_package(Boost 1.42.0 REQUIRED )
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
find_package(Eigen REQUIRED)
include_directories(${EIGEN_INCLUDE_DIRS})
find_package(Sqlite3 REQUIRED)
include_directories(${SQLITE3_INCLUDE_DIR})
set(CMAKE_CXX_FLAGS "-std=c++0x")
include_directories(.)
link_libraries(
    ${Boost_LIBRARIES}
    ${SQLITE3_LIBRARIES}
)
add_executable(igd_sqlite
    main.cpp
)

你可以用它来生成visual studio项目、makefiles等。然后像往常一样构建项目。

CMake支持很多开箱即用的库,尽管有时你必须谷歌不太受欢迎的库并将它们添加到你的项目中。

我在日常工作中使用它,即使我不需要跨平台。

当我确实想要分发二进制文件时,我通常会为二进制文件设置一个外部文件夹。

下面是一个例子:

https://github.com/tomisarobot/curl_race

如果你没有很多的外部依赖,如果它们不是很大,这是非常有效的。如果情况并非如此,那么我建议将每个平台放在不同的存储库中。你的信息来源也应该是独立的。如果需要,您可以使用子项目,尽管这不是必须的。外部深度不会经常改变,所以它并不总是值得的开销。通常我只是编写一个bash脚本来记录从哪里获得所有东西。无论如何,这个脚本通常是构建发行版所必需的。

像maven-nar-plugin这样的东西是存在的,尽管我不知道它是否成熟。如果您只是创建所有的二进制文件,以便与源代码一起分发,那么它可能就不那么吸引人了。我没有看到很多关于它的讨论,所以我认为采用率很低。看到maven为Java做了什么,它应该更受欢迎。

几点思考

1)工具
  • 在可能的情况下,将工具源包含在存储库中,以便可以将它们作为第一次构建的步骤

  • 如果不可能,明确指定所需工具的最低版本,以便用户可以自己安装它们

    • 可能通过运行脚本检查是否满足依赖项要求

2)语言

严格遵从语言进行编译。例如

   g++ -std=c++11 -pedantic