我想在GitHub上啓動一個C++項目,這樣我就可以克隆/在不同的操作系統上構建(例如OSX和unix)。會有很多需要安裝的依賴項(例如curl,libxml2等),並且儘可能避免用戶需要在系統上手動安裝代理。是否有可能做到這一點?我應該如何在github上設置一個C++項目,以便它是可移植的?
10
A
回答
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. 如何可移植是C++?
- 2. 我應該如何聲明一個Microsoft.Office.Interop.Excel.Worksheet,以便在C#中關閉它?
- 3. 我該如何更改舊項目,以便可以使用ARC?
- 4. 我應該將我的WebBroker項目移植到Indy
- 5. 組織一個CMake的項目,以便源可以在Visual C++
- 6. 我在eclipse中有一個java項目。我如何獲得它,以便您可以在終端中運行它?
- 7. 我應該在github上保留我的fork項目多久?
- 8. 如何在我的機器上本地安裝一個clojure庫,以便它可以訪問其他項目?
- 9. 如何設置一個可移植的persistence.xml文件?
- 10. 如何移植項目?
- 11. 如何部署一個可移植的C++應用程序?
- 12. VBA項目移植到C#項目
- 13. 我應該使用哪個TLS庫,可移植性是一個問題
- 14. iOS - 如何在UITextField中設置nil(它應該是可見的)
- 15. 我們如何在ASP.Net中移植ASP項目項目
- 16. 如何將一個Arduino程序移植到.net以便在Netduino上使用?
- 17. .NET可移植性警告:CA1901 PInvoke的聲明應該是可移植
- 18. 我可以/如何設置一個heroku實例,以便多個用戶可以管理它?
- 19. 在代碼塊中製作一個可移植的SFML項目
- 20. 我應該如何修復XCode 9 Beta 2 ARKit spritekit演示項目,以便它可以工作
- 21. 哪個項目我應該能遷移
- 22. 如何設置一個基本的symfony2項目克隆github後
- 23. 如何設置htmlHelpers項目,以便它生成兩個dll - 對於mvc3和mvc4?
- 24. 在Dreamhost上,我如何獲得「django-admin startproject」以正確設置django 1.4應該設置的項目?
- 25. 我可以保存NetBeans項目的狀態,以便我可以恢復它嗎?
- 26. 如果我要將一些GitHub回購移植到其他語言,我應該分叉它嗎?
- 27. 如何配置Eclipse,以便它可以處理大量的項目和代碼?
- 28. 我應該將我的Android應用移植到iPhone上嗎?
- 29. 我該如何適應我的級別加載器,以便它可以在所有Android手機上運行?
- 30. 的可移植性一個C代碼
CMake應該這樣做。 – JosephH 2013-04-06 03:00:38
你將如何自動在Windows上安裝依賴關係? – gongzhitaao 2013-04-06 03:04:47