2013-08-20 45 views
1

在此處閱讀其他問題我發現可以更改visual studio中的outdir宏。我真的搜索,但沒有找到/明白如何去做。CMAKE - 通過cmake更改outdir宏

這很簡單。我只想更改項目屬性 - >配置屬性 - >常規 - >輸出目錄。因爲我知道這將改變outdir宏。

我知道這是通過set_target_property使用某種cmake PROPERTY,但我真的沒有找到如何。

回答

0

到底,什麼工作對我來說是把與調試前綴target_link_libraries和優化前綴點發布配置和relwithdebinfo配置的完整路徑釋放調試路徑和調試。我也摘下link_directories ...我不會,如果我不明白,但它對我有用!

3

如你所懷疑的那樣,這很簡單。您需要查看ARCHIVE_OUTPUT_DIRECTORYLIBRARY_OUTPUT_DIRECTORYRUNTIME_OUTPUT_DIRECTORY目標屬性以修改outdir路徑。

這些都具有特定於配置的變體(例如ARCHIVE_OUTPUT_DIRECTORY_DEBUG),並且都可以通過前綴爲CMAKE_的同名全局CMake變量進行初始化。

因此,您可以

set_target_properties(MyExe PROPERTIES RUNTIME_OUTPUT_DIRECTORY <custom path>) 

,或者影響到所有的目標,

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY <custom path>) 

NB。從文檔:

多配置生成器(VS,Xcode)將每個配置的子目錄附加到指定的目錄。

下面是顯示此行爲的示例。它編寫自己的C++源代碼文件,所以你只需要將它複製到一個文件夾中,然後調用CMake,然後在Debug,Release,MinSizeRel和RelWithDebInfo中創建最終的解決方案。使用VS2012進行測試。不管構建類型如何,可執行文件總是以<build dir>/Exes/Debug結尾,類似地,庫總是在<build dir>/Libs/Debug中。

cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR) 
project(Example) 

file(WRITE lib.hpp "void Print();\n") 
file(WRITE lib.cpp "#include<iostream>\nvoid Print() { std::cout << \"Hello World\\n\"; }\n") 
file(WRITE main.cpp "#include \"lib.hpp\"\nint main() { Print(); return 0; }\n") 

set(ArchiveOutputDir ${CMAKE_BINARY_DIR}/Libs/Debug) 
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${ArchiveOutputDir}) 
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL ${ArchiveOutputDir}) 
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${ArchiveOutputDir}) 
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO ${ArchiveOutputDir}) 

set(RuntimeOutputDir ${CMAKE_BINARY_DIR}/Exes/Debug) 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${RuntimeOutputDir}) 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${RuntimeOutputDir}) 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${RuntimeOutputDir}) 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${RuntimeOutputDir}) 

add_library(MyLib lib.cpp lib.hpp) 
add_executable(MyExe main.cpp) 
target_link_libraries(MyExe MyLib) 
+0

我試過了。沒有工作,我會閱讀更多有關當時,但只是爲了確保。 我想要做的是改變設置爲Release或Debug的$(outdir)宏。它會在附加庫依賴關係中添加自動添加。例如,我希望將所有變爲始終調試,如果我真的在調試VS不調試VS –

+0

您是否在* add_library或add_executable之前設置了'CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG'變量(或無論哪個)電話?這些默認的CMake變量用於在聲明它們的地方初始化本地目標屬性。爲了讓例如所有在同一個目錄中創建的庫,無論構建類型如何,只需將所有版本的'CMAKE_ARCHIVE_OUTPUT_DIRECTORY_ '設置爲相同的值。 – Fraser

+0

經過很多天的嘗試,沒有工作。 我有這樣的: C:\目錄\ anotherDir \發行(發行版) 但我想這: C:\目錄\ anotherDir \調試(發行版) 在附加庫目錄 –