Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该如何设置C++;在github上进行项目以使其可移植? 我想在GITHUB上启动一个C++项目,这样我就可以在不同的操作系统上克隆/构建(例如,OSX和UNIX)。需要安装很多依赖项(例如curl、libxml2等),我希望尽可能避免用户需要在系统上手动安装deps。有可能做到这一点吗?_C++_Github_Portability - Fatal编程技术网

我应该如何设置C++;在github上进行项目以使其可移植? 我想在GITHUB上启动一个C++项目,这样我就可以在不同的操作系统上克隆/构建(例如,OSX和UNIX)。需要安装很多依赖项(例如curl、libxml2等),我希望尽可能避免用户需要在系统上手动安装deps。有可能做到这一点吗?

我应该如何设置C++;在github上进行项目以使其可移植? 我想在GITHUB上启动一个C++项目,这样我就可以在不同的操作系统上克隆/构建(例如,OSX和UNIX)。需要安装很多依赖项(例如curl、libxml2等),我希望尽可能避免用户需要在系统上手动安装deps。有可能做到这一点吗?,c++,github,portability,C++,Github,Portability,没什么想法 1) 工具 如果可能,将工具源包括在存储库中,这样您就可以第一次构建它们 如果不可能,请明确指定所需工具的最低版本,以便用户自己安装 可能通过运行脚本来检查依赖项要求是否得到满足 2) 语言 严格按照语言进行编译。比如说 g++ -std=c++11 -pedantic 这取决于你想咬多少 简单的回答是让CMake做这项工作。它将为任何平台生成项目,并且它们应该是可用的。您不需要为此分发二进制文件,前提是您(以及扩展后的用户)可以随时使用它们 下面是一个设置sqlit

没什么想法

1) 工具

  • 如果可能,将工具源包括在存储库中,这样您就可以第一次构建它们

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

    • 可能通过运行脚本来检查依赖项要求是否得到满足
2) 语言

严格按照语言进行编译。比如说

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

这取决于你想咬多少

简单的回答是让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
)
您可以使用它并生成VisualStudio项目、makefiles等,然后像平常一样构建项目

CMake支持很多现成的库,尽管有时您必须搜索不太流行的库并将它们添加到您的项目中

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

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

以下是一个例子:

如果您没有太多的外部依赖项,并且它们不是很大的依赖项,那么这种方法非常有效。如果不是这样,那么我建议将每个平台放到不同的存储库中。你的资料来源也应该是自己的。如果需要,可以使用子项目,尽管这不是严格必要的。外部部门不会经常改变,所以它并不总是值得开销。通常我只是写一个bash脚本来记录从哪里获取所有东西。无论如何,这个脚本通常是发行版构建所必需的


虽然我不知道它是否成熟,但像这样的东西是存在的。如果你只是创建了所有的二进制文件来与你的源代码一起发布,那么它可能就没有那么吸引人了。我没有看到太多关于它的讨论,所以我认为采用率很低。了解了maven为Java所做的工作后,它应该更受欢迎。

如何在Windows上自动安装依赖项?另外:使用库,将特定于系统的调用抽象到统一接口(适用于所有系统)中可能会有所帮助。