В CMake, как мне работать с каталогами Debug и Release, которые пытается добавить Visual Studio 2010? - PullRequest
24 голосов
/ 13 октября 2011

Я пытаюсь создать один из своих проектов на основе CMake пару лет назад с помощью Visual Studio 2010, и у меня возникают проблемы с выходным каталогом для проекта.Visual Studio всегда очень старался добавлять подкаталоги Debug / и Release / при выводе двоичных файлов, и по разным причинам я всегда очень стремился их удалить - теперь, когда я использую новую версию CMake и новую версиюVisual Studio, старый обходной путь в CMake, похоже, больше не работает, и я ищу, чтобы найти «новый» способ сделать это.

С предыдущей версией CMake (2.6) и предыдущей версиейVisual Studio (2008), я использовал следующее:

IF(MSVC_IDE)
    # A hack to get around the "Debug" and "Release" directories Visual Studio tries to add
    SET_TARGET_PROPERTIES(${targetname} PROPERTIES PREFIX "../")
    SET_TARGET_PROPERTIES(${targetname} PROPERTIES IMPORT_PREFIX "../")
ENDIF(MSVC_IDE)

Это работало нормально, но, похоже, больше не сработало.Кто-нибудь знает о подобном, но более современном обходном пути, который будет работать с CMake 2.8.6 и Visual Studio 2010?

Ответы [ 3 ]

55 голосов
/ 13 октября 2011

Это немного зависит от того, что именно вы хотите, но я бы порекомендовал взглянуть на доступные целевые свойства , похожие на этот вопрос .

Это зависит немного от того, что вы хотите именно.Для каждой цели вы можете вручную установить свойства library_output_directory или runtime_output_directory .

if ( MSVC )
    set_target_properties( ${targetname} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${youroutputdirectory} )
    set_target_properties( ${targetname} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_DEBUG ${youroutputdirectory} )
    set_target_properties( ${targetname} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_RELEASE ${youroutputdirectory} )
    # etc for the other available configuration types (MinSizeRel, RelWithDebInfo)
endif ( MSVC )

Вы также можете сделать это глобально для всех подпроектов, используя что-то вроде этого:

# First for the generic no-config case (e.g. with mingw)
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${youroutputdirectory} )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${youroutputdirectory} )
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${youroutputdirectory} )
# Second, for multi-config builds (e.g. msvc)
foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
    string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
    set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${youroutputdirectory} )
    set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${youroutputdirectory} )
    set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${youroutputdirectory} )
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )
4 голосов
/ 25 августа 2017

В текущих версиях CMake вы можете использовать выражение генератора для LIBRARY_OUTPUT_DIRECTORY, чтобы избежать специфичного для конфигурации суффикса.

Я только что добавил $<$<CONFIG:Debug>:>, который всегда расширяется до нуля, к моему. Это выглядит немного странно, но это работает, и это не так странно, что вы не можете объяснить это кратким комментарием:

# Use a generator expression so that the specified folder is used directly, without any
# configuration-dependent suffix.
#
# See https://cmake.org/cmake/help/v3.8/prop_tgt/LIBRARY_OUTPUT_DIRECTORY.html
set_target_properties(library PROPERTIES
                      LIBRARY_OUTPUT_DIRECTORY my/folder/$<$<CONFIG:Debug>:>)
0 голосов
/ 18 мая 2019

https://cmake.org/cmake/help/latest/prop_tgt/LIBRARY_OUTPUT_DIRECTORY.html объясняет, что:

Мультиконфигурационные генераторы (VS, Xcode) добавляют подкаталог для конфигурации в указанный каталог, если не используется выражение генератора.

Таким образом, единственный обходной путь - использовать выражение генератора.Один из отличных способов сделать это - использовать $ <0:> в конце вашего пути.Поэтому, если ваш путь - / what / ever /, вам нужно будет заменить его на /what/ever/$<0:>.

Пример с целью: Nuua и путем: C: / Nuua /bin /

set_target_properties(nuua PROPERTIES RUNTIME_OUTPUT_DIRECTORY C:/Nuua/bin/$<0:>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...