2015-01-22 2 views
1

Visual Studio 및 Makefile 용 솔루션을 생성하기 위해 CMake를 사용하고 있습니다. 이미 디버그 및 릴리스 형식에 대해 다른 폴더를 만드는 데 성공했으며 솔루션에서 두 가지 옵션을 발견했습니다. 내가 Win32 및 64에 대해 동일한 작업을 수행 할CMake 및 Makefile의 다중 아키텍처

  1. :

    지금 내가 3 개 질문이? 가능한가? 편집 : 약간의 연구 후, 그것은 불가능한 것 같습니까?)

  2. 그리고 또 다른 질문은 "NMake Makefiles"를 생성 할 때 내 메이크 파일에서 내 두 가지 유형 (릴리스 및 디버그)을 검색 할 수 없습니다! 어떤 파일에서 이걸 가져올 수 있습니까?
  3. EDIT : 그리고 어떻게 NMake 명령으로 CLI에서 디버그 또는 릴리스를 설정할 수 있습니까? 여기

CMakeLists.txt입니다 : 내가 NMAKE 또는 cmake의 NMAKE 발생기에 대해 잘 모르는

cmake_minimum_required(VERSION 2.8) 

# Configuration of Types 
MESSAGE("Generated with config types: ${CMAKE_CONFIGURATION_TYPES}") 
SET(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE) 

#Configuration of zlib.lib 

PROJECT(zlib C) 
# Path of Release 
SET(LIB_RELEASE_PATH "../cmake_x64") 
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${LIB_RELEASE_PATH}/lib/") 
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${LIB_RELEASE_PATH}/lib/") 
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${LIB_RELEASE_PATH}/lib/") 
# Path of Debug 
SET(LIB_DEBUG_PATH "../cmake_x64d") 
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${LIB_DEBUG_PATH}/lib/") 
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${LIB_DEBUG_PATH}/lib/") 
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${LIB_DEBUG_PATH}/lib/") 

SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3") 
ADD_DEFINITIONS("/Gm" -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D_UNICODE) 

# Files of librairy 
ADD_LIBRARY(

    zlib 

    STATIC 

    ../.c 
    and 
    ../.h 

) 

#Configuration of core.dll 
project(core CXX) 
# Path of Release 
SET(BIN_RELEASE_PATH "../cmake_x64") 
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${BIN_RELEASE_PATH}/bin/") 
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${BIN_RELEASE_PATH}/bin/") 
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${BIN_RELEASE_PATH}/bin/") 
# Path of Debug 
SET(BIN_DEBUG_PATH "../cmake_x64d") 
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${BIN_DEBUG_PATH}/bin/") 
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${BIN_DEBUG_PATH}/bin/") 
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${BIN_DEBUG_PATH}/bin/") 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") 
set_property(GLOBAL PROPERTY LINK_LIBRARY_DEPENDENCIES "yes") 
add_definitions(-D_UNICODE -D_USRDLL -DCORE_EXPORTS) 
add_definitions("/Gm") 

# Files of librairy 
add_library(

     core 

     SHARED 

    ../.h 
    and 
    ../.cpp 

) 
link_directories("/build/lib/") 
target_link_libraries(core zlib) 

#END OF FILE 

감사

답변

2

하지만 메이크 발전기 같은 것을 다음의 경우 세 가지 질문에 대한 대답은 "할 수 없다"입니다.

첫 번째 질문에 대해 Visual Studio (내 이해)는 빌드 유형을 지원하는 방식으로 여러 아키텍처를 지원하지 않습니다. 확실히 cmake가 생성 한 Visual Studio 프로젝트 파일은 그것을 수행 할 수 없습니다.

두 번째 질문에 대해서는 cmake가 생성 한 makefile이 빌드 유형을 지원하지 않으며 nmake가 같은 제한을 가지고 있다고 가정합니다. 나는 이것이 cmake 메이크 파일 생성기의 제한이라고 생각한다. 메이크 파일에는 다중 빌드 유형 을 지원할 수 없다는 고유 한 이유가 없습니다.

그리고 세 번째 질문과 마찬가지로 makefile/nmake 출력으로 여러 빌드 유형을 지원할 수 없으므로 명령 줄에서 빌드 할 빌드를 선택할 수 없습니다.

이러한 모든 질문에 대한 대답은 다양한 옵션 (아키텍처 및 빌드 유형)을 선택하기 위해 다른 플래그로 cmake를 다시 실행해야한다는 것입니다.

걱정되는 부분이 매번 작업 영역을 정리하고 처음부터 다시 구성해야하고 이전 작업을 잃어 버릴 필요가 없다면 cmake의 소스가 아닌 빌드 기능을 조사해야합니다. 사용하는 대신 기본적으로 :

cmake . 

당신은 같은 것을 사용

mkdir obj-x86 
cd obj-x86 
cmake .. 

mkdir ..\obj-x64 
cd ..\obj-x64 
cmake .. 

당신은 다른 디렉토리에 cmake를 실행하는 각 다른 구성 (하위 디렉토리 일 필요는 없습니다). 그들은 모두 같은 소스 트리를 공유 할 수 있습니다. 경우에 따라 처음으로이 작업을 시도 할 때 특정 작업 디렉토리 등을 가정하는 cmake 파일의 문제를 발견하게되며 상대 경로가 아닌 CMAKE_SOURCE_DIR과 같은 변수를 사용하도록 업데이트해야 할 수도 있습니다.

+0

확인. 이 답변을 주셔서 감사합니다. 다른 포럼에서도 같은 것을 읽었습니다. 그러나 이것은 각 폴더에 CMakeLists가 있어야한다는 것을 의미합니까? 아니면 어떻게 라인 명령에서 다른 폴더에 자신의 파일을 빌드 CMake 말 할 수 있습니까? – Algorys

+0

"각 폴더"가 무슨 뜻인지 확실하지 않습니다. CMakeLists.txt 파일을 이전보다 더 만들 필요가 없습니다. 위의 단계에서 mkdir을 실행 한 다음 cd를 입력하고 cmake를 실행하십시오. 그들은 전혀 내용이 없습니다. "cmake"를 실행하는 대신 일반적으로하는 것처럼 소스 트리의 루트에서 새로운 빈 디렉토리 내에서 cmake를 실행하고 "."대신 인수로 소스 디렉토리에 경로 이름을 전달합니다. – MadScientist

+0

확인. 이해, 나는 현재 폴더에 CMake 빌드 잊지. 많은 감사합니다. – Algorys