sta*_*guy 11 c++ portability github
我想在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
)
Run Code Online (Sandbox Code Playgroud)
您可以使用它并生成 Visual Studio 项目、makefile 等。然后像平常一样构建项目。
CMake 支持许多开箱即用的库,尽管有时您确实必须搜索不太受欢迎的库并将它们添加到您的项目中。
我将它用于日常工作,即使我不需要跨平台。
当我确实想要分发二进制文件时,我通常会设置一个包含二进制文件的外部文件夹。
这是一个例子:
https://github.com/tomisarobot/curl_race
如果您没有很多外部依赖项并且它们不是很大,那么这非常有用。如果情况并非如此,那么我建议将每个平台放在不同的存储库中。您的来源也应该是自己的。如果需要,您可以使用子项目,但这并不是绝对必要的。外部部门不会经常改变,因此并不总是值得付出这些开销。通常我只是编写一个 bash 脚本来记录从哪里获取所有内容。无论如何,这个脚本对于发行版构建通常是必需的。
像maven-nar-plugin这样的东西是存在的,尽管我不知道它的成熟度。如果您只是创建所有二进制文件以随源一起分发,那么也许它没有那么有吸引力。我没有看到太多关于它的讨论,所以我认为采用率很低。看过maven对Java做了什么,应该更受欢迎。
归档时间: |
|
查看次数: |
2793 次 |
最近记录: |