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

我想在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来说,它应该更受欢迎.

转载注明原文:我应该如何在github上设置一个C项目以便它可移植? - 代码日志