我使用cmake來管理我的跨平臺版本,除了這個問題,我已經做好了一切工作。我將RUNTIME_OUTPUT_DIRECTORY
設置爲bin/
目錄,其中存儲了數據文件。在Linux上,這工作正常。在Windows上,根據構建類型,可執行文件將被放置在Debug
/Release
子目錄中。有沒有辦法讓cmake將可執行文件複製到正確的目錄,或者(甚至更好)完全停止使用這些子目錄?Windows上的cmake RUNTIME_OUTPUT_DIRECTORY
回答
我一直在使用多年前由Ogapo報道的罰款前綴屬性hack。有用。
但是從CMake 2.8版開始,官方支持避免Windows上的Release/Debug子目錄。
使用或者全球CMAKE_<ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION>
變量,或按目標<ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION>
性質,就像這樣:
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")
我發現了關於這一主題的幾個良好的討論:
http://www.cmake.org/pipermail/cmake/2008-April/021355.html
http://www.vtk.org/Bug/bug_view_advanced_page.php?bug_id=8366
是否可以使用已棄用EXECUTABLE_OUTPUT_PATH而不是RUNTIME_OUTPUT_DIRECTORY?我不確定2之間哪些功能發生了變化,但可能值得一試。
您需要更改Visual Studio項目的構建位置。轉到項目屬性,然後在編譯選項卡上指定「生成輸出路徑」以便在任何地方使用。
注
不知道怎麼的相關,這是因爲我不知道你的CMake。
您可以使用下面的令牌在Visual Studio中建立的事件:
$(TargetPath)
這將是路徑,該項目是建立在位置,所以要根據您的項目設置,這要麼是調試或發佈文件夾。
一些cmake變量已經構建了特定的版本。
CMAKE_C_FLAGS
the compiler flags for compiling C sources. Note you can also specify switches with ADD_DEFINITIONS().
CMAKE_C_FLAGS_DEBUG
compiler flags for compiling a debug build from C sources.
CMAKE_C_FLAGS_RELEASE
compiler flags for compiling a release build from C sources.
CMAKE_C_FLAGS_RELWITHDEBINFO
compiler flags for compiling a release build with debug flags from C sources.
我沒有驗證這些瓦爾存在,但也許設置RUNTIME_OUTPUT_DIRECTORY_DEBUG
& & RUNTIME_OUTPUT_DIRECTORY_RELEASE
以同樣的事情可能會奏效。
我不知道,如果這些目錄是故意的還是錯誤的,但在前進的不兼容性的風險,你可以添加:
if (MSVC_IDE)
# hack to get around the "Debug" and "Release" directories cmake tries to add on Windows
set_target_properties (${NAME} PROPERTIES PREFIX "../")
endif()
這已經爲我工作
這對我來說也很好。對於.lib文件使用SET_TARGET_PROPERTIES($ {PROJECT_NAME} PROPERTIES IMPORT_PREFIX「../」) – Torleif 2009-08-28 13:26:28
到目前爲止,最好的我發現的答案是簡單地爲我的每個目標和數據文件編寫CMake install commands,並設置MSVC調試器以運行安裝目錄。這具有使用CPack創建安裝程序的額外好處。
對我來說,一個全球性的:
set(CMAKE_STATIC_LIBRARY_PREFIX "../lib")
set(CMAKE_SHARED_LIBRARY_PREFIX "../lib")
所做的工作,所以我沒有將其設置爲每個庫(CMake的2.8。4)
- 1. Windows上的Clang和CMake
- 2. 在windows上包含soci cmake
- 3. 在Windows上運行CMake
- 4. 與Windows Phone的cmake
- 5. cmake Windows 10 SDK
- 6. 試圖在Windows 8上用Cmake構建SFML。但Cmake失敗
- 7. Cmake在Windows 10上找不到Freetype
- 8. cmake在windows上找到sqlite3庫
- 9. 如何在Windows 64位上安裝cmake
- 10. cmake在Windows上導出共享庫
- 11. 使用CMake在windows上設置FLTK
- 12. 在Windows 10上用Cmake編譯Heimdall
- 13. cmake安裝不在Windows上安裝庫
- 14. CMake鏈接Windows SDK
- 15. CMake錯誤(windows gui)
- 16. CMake的不能在Windows
- 17. cmake的無法在Windows XP
- 18. Mac上的CMake GUI
- 19. CMake上的Boost_DIR-NOTFOUND
- 20. Cmake命令行太長windows
- 21. 管理OpenCV python Cmake Studio Windows
- 22. CMake檢查Windows版本
- 23. 如何在使用C++和CMake的Windows上開發
- 24. Windows上的CMake命令configure_file有什麼不同?
- 25. CMake錯誤:BUILD_TBB選項僅支持ARM上的Windows
- 26. 在Windows上使用CMake時未找到包含的目錄
- 27. 在Windows上使用CMake的HDF5庫(錯誤:「找不到HDF5」)
- 28. Windows上的Clang和CMake - clang.exe損壞,程序無法執行
- 29. QtCreator 1.3,Qt 4.6.2和windows上的cmake生成問題
- 30. CMake的FIND_LIBRARY在Windows上運行,但不OS X
我假設你正在使用cmake生成的Visual Studio解決方案/項目文件,是這樣嗎?使用什麼版本的Visual Studio?什麼版本的cmake? – 2009-02-15 20:04:51
是的,我使用CMake生成解決方案文件(cmake 2.6,VS 2005) – thekidder 2009-02-15 20:33:58