我使用CMake为Visual Studio和Makefile for Windows生成解决方案。我已经成功为调试和发布类型创建了不同的文件夹,我在我的解决方案中找到了两个选项。
现在我有3个问题:
这是我的 CMakeLists.txt :
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
由于
答案 0 :(得分:2)
我对nmake或cmake nmake生成器知之甚少,但如果它与makefile生成器类似,那么你所有三个问题的答案都是“你不能”。
对于第一个问题,Visual Studio(根据我的理解)不支持多种体系结构,它支持构建类型;当然,cmake生成的Visual Studio项目文件无法做到。
对于第二个问题,cmake生成的makefile不支持构建类型,我假设nmake具有相同的限制。我希望这只是cmake makefile生成器的一个限制; makefile中没有固有的原因,无法支持
。类似于第三个问题,因为你不能用makefile / nmake输出支持多个构建类型,你当然不能选择在命令行上构建哪个构建类型。
所有这些问题的答案是,您必须使用不同的标志重新运行cmake以选择不同的选项(架构和构建类型)。
如果您关注的是不必清理工作区并且每次都从头开始重新配置它而丢失以前的工作,那么您应该查看cmake的源外构建功能。基本上,而不是使用:
cmake .
你使用类似的东西:
mkdir obj-x86
cd obj-x86
cmake ..
mkdir ..\obj-x64
cd ..\obj-x64
cmake ..
您在每个不同配置的不同目录(不必是子目录)中运行cmake。它们都可以共享相同的源树。有时当你第一次尝试这个时,你会发现你的cmake文件中的问题,他们假设一个特定的工作目录等,你可能需要更新它们以使用像CMAKE_SOURCE_DIR
这样的变量而不是相对路径。