2013-04-06 25 views
10

我想在GitHub上啓動一個C++項目,這樣我就可以克隆/在不同的操作系統上構建(例如OSX和unix)。會有很多需要安裝的依賴項(例如curl,libxml2等),並且儘可能避免用戶需要在系統上手動安裝代理。是否有可能做到這一點?我應該如何在github上設置一個C++項目,以便它是可移植的?

+2

CMake應該這樣做。 – JosephH 2013-04-06 03:00:38

+0

你將如何自動在Windows上安裝依賴關係? – gongzhitaao 2013-04-06 03:04:47

回答

3

這取決於你想咬掉多少。

簡短的答案是讓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 
) 

你會採取這一點,並生成視覺工作室項目,makefiles等,然後像平常一樣建立項目。

CMake支持大量圖書館,雖然有時你不得不穀歌爲不太流行的,並將它們添加到您的項目。

我用它來做我的日常工作,即使我不需要跨平臺。

當我確實想分發二進制文件時,我通常會用二進制文件設置一個外部文件夾。

下面是一個例子:

https://github.com/tomisarobot/curl_race

這個偉大的工程,如果你沒有大量的外部依賴性的,如果他們不是很大。如果情況並非如此,那麼我建議將每個平臺放在不同的存儲庫中。你的來源也應該是自己的。如果你願意,你可以使用子項目,儘管這不是必須的。外部deps不經常改變,所以它不總是值得的開銷。通常我只是寫一個bash腳本來記錄從哪裏得到一切。無論如何,這個腳本通常是分發版本所必需的。

maven-nar-plugin這樣的事情存在,但我不知道它的成熟。如果你只是創建所有的二進制文件來與你的源代碼分享,那麼它可能不是那麼有吸引力。我沒有看到很多關於它的討論,所以我認爲採用率很低。看過Maven對Java的貢獻後,它應該更受歡迎。

1

一些想法

1)工具

  • 如果可能,包括在庫中的工具的來源,使人們可以建立他們作爲第一時間僅步驟

  • 當不可能,明確指出需要什麼工具的最低版本,以便用戶可以自己安裝它們

    • 可能檢查依賴性需求是通過運行一個腳本

滿足2)語言

編譯嚴格的語言遵從。例如

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

另外:使用庫可將系統特定的調用抽象爲統一接口(適用於所有系統),這可能有所幫助。 – scones 2013-04-06 04:29:58

+0

+1:是的,絕對。 – Arun 2013-04-06 07:39:21

相關問題