看起来我们需要为每个构建类型(调试/发布)创建单独的文件夹,在每个构建类型上运行cmake,并为调试/发布配置生成单独的makefile.是否可以使用cmake创建一个单独的makefile,它同时支持调试/发布配置,当我们实际运行"make"时,将为中间产品和最终产品(如dll,exe)创建单独的文件夹.
在下面的CMakeLists.txt文件中,虽然我已经设置了add_custom_command带PRE_BUILD选项的命令,但在创建主可执行文件之前并不总是执行自定义命令:
cmake_minimum_required(VERSION 2.8)
project(VersioningTest)
set(MAJOR 1)
set(MINOR 0)
set(PATCH 0)
set(PRODUCT App-${MAJOR}-${MINOR}-${PATCH})
ADD_EXECUTABLE(${PRODUCT}
main.cpp
Engine.cpp)
add_custom_command(TARGET ${PRODUCT} PRE_BUILD
COMMAND ${CMAKE_COMMAND}
-DMAJOR=${MAJOR}
-DMINOR=${MINOR}
-DPATCH=${PATCH}
-P ${CMAKE_SOURCE_DIR}/SetVersion.cmake
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "setting version...")
Run Code Online (Sandbox Code Playgroud)
所以,我决定更换add_custom_command同add_custom_target和add_dependencies:
add_custom_target(SetVersion
COMMAND ${CMAKE_COMMAND}
-DMAJOR=${MAJOR}
-DMINOR=${MINOR}
-DPATCH=${PATCH}
-P ${CMAKE_SOURCE_DIR}/SetVersion.cmake
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "setting version...")
add_dependencies(${PRODUCT} SetVersion)
Run Code Online (Sandbox Code Playgroud)
它奏效了.现在SetVersion.cmake每次执行文件都在执行主可执行文件之前执行.这有什么错add_custom_command我的CMake的文件?
SetVersion.cmake文件内容:
EXECUTE_PROCESS(
COMMAND svn info ${CMAKE_SOURCE_DIR}
COMMAND grep Revision
OUTPUT_VARIABLE REVISION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
EXECUTE_PROCESS(
COMMAND svn diff ${CMAKE_SOURCE_DIR} …Run Code Online (Sandbox Code Playgroud)