2014-11-28 4 views
2

Я начинаю в Cmake и пытаюсь скомпилировать библиотеку с моим make-файлом. После часов и часов исследований все хорошо и компилирует штрафы в визуальной студии. Но это все еще проблема для выпадающих папок. Объясняю.Переместить папку освобождения и отладки cmake

Я хочу иметь эту структуру папок в конце:

-vc_2013_x64  < for platform x64 in release 
--bin 
---my.dll, my.lib, ... 

-vc_2013_x64d  < for platform x64 in debug 
--bin 
---my.dll, my.lib, ... 

Но когда я пытаюсь сделать это дерево, CMake добавить «освобождение» и папки «отладки» после того, как мою папку бин. Например, следующий пример:

-vc_2013_x64 
--bin 
*---release* --> NOT WANTED FOLDER 
----my.dll, my.lib, ... 

Как я могу это исправить? или попробуйте переоценить это возможно:

-release 
--vc_2013_x64 
---bin 
----my.dll, my.lib, ... 

Я ищу в Интернете, но не нашел ответа.

Вот мой CMakeLists.txt файл:

cmake_minimum_required(VERSION 2.8) 

#Configuration du projet 

project(core CXX) 

#add definitions 
set(LIBRARY_OUTPUT_PATH /vc2013_x64/bin/) 
set(LIBRARY_OUTPUT_DIRECTORY ../essai) 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") 
add_definitions(-D_UNICODE -D_USRDLL -DCORE_EXPORTS) 
add_definitions("/Gm")#"/GL" "/Gy" 


#remove_definitions 
add_definitions(-UCMAKE_INTDIR="Release") 

#inclusions 
#include_directories(include/*) 
#file(GLOB_RECURSE source_files src/*) 

#Configuration de la librairie 
add_library(

    core 

    SHARED 

    src/asserts.h 
    src/errors.h 
    src/filepath.h 
    src/memory.h 
    src/resources.h 
    src/stdafx.h 
    src/streams.h 
    src/string.h 
    src/system.h 
    src/variants.h 

    src/filepath.cpp 
    src/main.cpp 
    src/memory.cpp 
    src/resources.cpp 
    src/stdafx.cpp 
    src/streams.cpp 
    src/string.cpp 
    src/system.cpp  
) 

А вот моя структура папок:

-core 
--src   -> contains my .h and .cpp files 
--win32   -> solution files of visual studios 
--cmake_build -> contains my files generated by cmake 
--CMakeLists.txt 

Благодаря

Edit:

Так я пытаюсь сделать что-то как вы говорите, но он не создает папку i specific:

project(core CXX) 

#add definitions 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") 
add_definitions(-D_UNICODE -D_USRDLL -DCORE_EXPORTS) 
add_definitions("/Gm")#"/GL" "/Gy" 

#remove_definitions 
add_definitions(-UCMAKE_INTDIR="Release") 


#Configuration de la librairie 
add_library(

     core 

     SHARED 

    src/asserts.h 
    src/errors.h 
    src/filepath.h 
    src/memory.h 
    src/resources.h 
    src/stdafx.h 
    src/streams.h 
    src/string.h 
    src/system.h 
    src/variants.h 

    src/filepath.cpp 
    src/main.cpp 
    src/memory.cpp 
    src/resources.cpp 
    src/stdafx.cpp 
    src/streams.cpp 
    src/string.cpp 
    src/system.cpp  
) 

set(DIR_NAME "/vc2013_x64") 
set(LIBRARY_OUTPUT_PATH_RELEASE "${DIR_NAME}/bin") 
set(LIBRARY_OUTPUT_PATH_DEBUG "${DIR_NAME}d/bin") 
install (TARGETS core DESTINATION ${LIBRARY_OUTPUT_PATH_RELEASE} CONFIGURATIONS Release) 
install (TARGETS core DESTINATION ${LIBRARY_OUTPUT_PATH_DEBUG}) 
+0

Это похоже и может вам помочь: http://stackoverflow.com/questions/7747857/in-cmake-how-do-i-work-around-the-debug-and-release-directories-visual-studio -2 – ChrisWard1000

+0

Вам это нужно во время разработки или развертывания? – MatthiasB

+0

@ ChrisWard1000 Я пробую это решение, но он все еще не морков ... Я думаю, что я не сделал хороших изменений ... – Algorys

ответ

1

Итак, я нашел свой ответ сам. Кажется, я не правильно объясняю свой первый вопрос. Это просто для удаления папки после сборки. Следующие команды работают:

set(BIN_PATH "../path") -> define your principal path 
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${BIN_PATH}/bin/") ->define path for archive 
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${BIN_PATH}/bin/") ->define path for Library 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${BIN_PATH}/bin/") ->define path for Runtime 

Обычно все файлы создаются в/bin.

0

Что вы можете использовать - цель install CMAKE. Он позволяет определить цель установки, в которую вы можете скопировать библиотеки сборки и зависимые файлы. Для примера это может выглядеть примерно так:

add_library(core SHARED 
    ... 
) 

set(DIR_NAME "/vc2013_x64") 
set(LIBRARY_OUTPUT_PATH_RELEASE "${DIR_NAME}/bin") 
set(LIBRARY_OUTPUT_PATH_DEBUG "${DIR_NAME}d/bin") 

install (TARGETS core DESTINATION ${LIBRARY_OUTPUT_PATH_RELEASE} CONFIGURATIONS Release) 
install (TARGETS core DESTINATION ${LIBRARY_OUTPUT_PATH_DEBUG} CONFIGURATIONS Debug) 

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

+0

Большое спасибо за вашу помощь. Я попробую ваше решение и скопирую это в моем CMakeLists.txt, но когда я «Настроить» в CMake, он говорит: Ошибка CMake в CMakeLists.txt: 21 (установить): установить TARGETS с заданным целевым «ядром», которого нет в этом каталоге , – Algorys

+0

Учитывая номер вашей строки, я полагаю, вы поставили команду install перед командой 'add_library'?Цель на самом деле относится к имени, определенному вашей командой 'add_library' или' add_executable', а не именем проекта. Поэтому сначала вы должны определить свои библиотеки и исполняемые файлы перед их установкой. – MatthiasB

+0

ОК и мне нужно заменить LIBRARY_OUTPUT_PATH_DEBUG на относительный/абсолютный путь? – Algorys