Я использую CMake для создания решения для Visual Studio и Makefile для Windows. Мне уже удалось создать другую папку для типов отладки и выпуска, и я нашел два варианта в своем решении.Multi-Architecture в CMake и Makefiles
Теперь у меня есть 3 вопроса:
- Я хочу сделать то же самое для win32 и x64? Является ли это возможным ? EDIT: После некоторого исследования это кажется невозможным?)
- И еще один вопрос, когда я генерирую «NMake Makefiles», я не могу получить два моих типа (выпуск и отладка) в моем make-файле! В каких файлах я могу получить это?
- EDIT: И как я могу установить отладку или выпуск в CLI с помощью команды NMake?
Вот мой 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
Благодаря
OK. Спасибо за этот ответ. Я читал то же самое на другом форуме. Но это означает, что я должен иметь CMakeLists в каждой папке? Или как я могу сказать, чтобы CMake собирал свои файлы в другой папке в командной строке? – Algorys
Я не понимаю, что вы подразумеваете под «каждой папкой». Вам больше не нужно создавать файлы CMakeLists.txt, чем раньше. Каталоги, которые вы создаете для хранения объектов, - _empty_: обратите внимание на шаги выше. Я запускаю mkdir, затем cd в них, а затем запускаю cmake; у них нет никакого содержания. Вместо запуска «cmake». в корне вашего исходного дерева, как обычно, вы запускаете cmake из нового пустого каталога и передаете путь к исходному каталогу в качестве аргумента вместо «.». – MadScientist
Хорошо. Я понимаю, я забыл, что сборка CMake в текущей папке. Большое спасибо. – Algorys