2009-02-12 77 views
12

我使用來管理我的跨平臺版本,除了這個問題,我已經做好了一切工作。我將RUNTIME_OUTPUT_DIRECTORY設置爲bin/目錄,其中存儲了數據文件。在Linux上,這工作正常。在Windows上,根據構建類型,可執行文件將被放置在Debug/Release子目錄中。有沒有辦法讓將可執行文件複製到正確的目錄,或者(甚至更好)完全停止使用這些子目錄?Windows上的cmake RUNTIME_OUTPUT_DIRECTORY

+0

我假設你正在使用cmake生成的Visual Studio解決方案/項目文件,是這樣嗎?使用什麼版本的Visual Studio?什麼版本的cmake? – 2009-02-15 20:04:51

+0

是的,我使用CMake生成解決方案文件(cmake 2.6,VS 2005) – thekidder 2009-02-15 20:33:58

回答

9

我一直在使用多年前由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}") 
-4

您需要更改Visual Studio項目的構建位置。轉到項目屬性,然後在編譯選項卡上指定「生成輸出路徑」以便在任何地方使用。

不知道怎麼的相關,這是因爲我不知道你的CMake。

您可以使用下面的令牌在Visual Studio中建立的事件:

$(TargetPath)

這將是路徑,該項目是建立在位置,所以要根據您的項目設置,這要麼是調試或發佈文件夾。

1

一些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以同樣的事情可能會奏效。

10

我不知道,如果這些目錄是故意的還是錯誤的,但在前進的不兼容性的風險,你可以添加:

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() 

這已經爲我工作

+2

這對我來說也很好。對於.lib文件使用SET_TARGET_PROPERTIES($ {PROJECT_NAME} PROPERTIES IMPORT_PREFIX「../」) – Torleif 2009-08-28 13:26:28

1

到目前爲止,最好的我發現的答案是簡單地爲我的每個目標和數據文件編寫CMake install commands,並設置MSVC調試器以運行安裝目錄。這具有使用CPack創建安裝程序的額外好處。

1

對我來說,一個全球性的:

set(CMAKE_STATIC_LIBRARY_PREFIX "../lib") 
set(CMAKE_SHARED_LIBRARY_PREFIX "../lib") 

所做的工作,所以我沒有將其設置爲每個庫(CMake的2.8。4)