繁体   English   中英

我应该如何在github上设置一个C ++项目,以便它可以移植?

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

我想在GitHub上启动一个C ++项目,这样我就可以克隆/构建不同的操作系统(例如,OSX和unix)。 将需要安装许多依赖项(例如curl,libxml2等),并且尽可能地避免让用户需要在系统上手动安装deps。 是否有可能做到这一点?

这取决于你想咬多少。

简短的回答是让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
)

您将采用此方法并生成可视工作室项目,makefile等。然后像往常一样构建项目。

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

我将它用于我的日常工作,即使我不需要跨平台。

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

这是一个例子:

https://github.com/tomisarobot/curl_race

如果您没有很多外部依赖项并且它们不是很大,那么这很有用。 如果不是这样,那么我建议将每个平台放在不同的存储库中。 你的来源也应该是自己的。 如果需要,您可以使用子项目,但这不是绝对必要的。 外部代表经常不改变,所以它并不总是值得开销。 通常我只是编写一个bash脚本来记录获取所有内容的位置。 无论如何,此脚本通常是分发构建所必需的。

maven-nar-plugin这样的东西存在,虽然我不知道它的成熟度。 如果您只是创建所有二进制文件以分发您的源代码,那么也许它不那么有吸引力。 我没有看到很多关于它的讨论,所以我认为采用率很低。 看过maven为Java做什么,它应该更受欢迎。

几点想法

1)工具

  • 如果可能,请在存储库中包含工具源,以便可以将它们构建为仅第一次执行的步骤

  • 如果不可能,请清楚地指定所需工具的最低版本,以便用户自己安装

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

2)语言

编译严格的语言合规性。 例如

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM