簡體   English   中英

如何最好地為 Visual Studio 2017 構建的 CMake C++ 項目設置輸出目錄?

[英]How best to set output directory for a CMake C++ project built by Visual Studio 2017?

我使用 Visual Studio 2017 使用 .vcxproj 文件構建 C++ 桌面項目。 我喜歡輸出目錄是項目下面的子目錄的默認行為。 例如:

|-myproj.sln
|-myproj.vcxproj
|-----------------|--x64 --|-- myproj_release --|-- myproj.exe

我現在想使用 CMake 而不是 .vcxproj 來定義構建,這樣我就可以使用 Visual Studio Code 作為 Visual Studio 2017 的替代方案進行構建。

我使用 cmake-converter 將我的 .vcxproj 轉換為 CMake 項目。 生成的 CMakeLists.txt 包含:

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}")
  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}")
  set(CMAKE_EXECUTABLE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}")
else()
  set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_REL}")
  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_REL}")
  set(CMAKE_EXECUTABLE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_REL}")
endif()

當我使用 Visual Studio 2017 打開這個 CMakeLists.txt 並構建它時,它會將可執行文件放在我的用戶目錄的子目錄 CMakeBuilds 中。 我猜這是因為 Visual Studio 2017 正在確定 CMAKE_BINARY_DIR。

與我的 .vcxproj 文件一樣,將輸出目錄置於源目錄中的最佳方法是什么?

我認為我的問題的答案是在 CmakeSettings.json 中修改 buildRoot:

"buildRoot": "${workspaceRoot}\\build\\${name}"

Visual Studio 是一個多配置生成器。 也就是說,它一次多個配置配置項目。 因此,當使用此類生成器時,變量CMAKE_BUILD_TYPE不包含配置名稱,它只是空的。

默認情況下,對於多配置生成器,像CMAKE_LIBRARY_OUTPUT_DIRECTORY這樣的變量會自動附加每個配置的子目錄 有兩種方法可以處理這種行為:

  1. 定義變量時使用生成器表達式 該表達式可以有條件地計算,具體取決於配置類型。 例如:

     # For Debug configuration this will be evaluated to # '${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}' # For Release configuration this will be evaluated to # '${CMAKE_BINARY_DIR}/${OUTPUT_REL}' set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$<$<CONFIG:DEBUG>:${OUTPUT_DEBUG}>$<$<CONFIG:RELEASE>:${OUTPUT_REL}>")
  2. 使用_<CONFIG>版本的變量。 例如:

     # Output directory for libraries in Debug configuration set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}) # Output directory for libraries in Release configuration set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/${OUTPUT_REL})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM