相关疑难解决方法(0)

Cmake可以生成一个支持调试和发布的makefile

看起来我们需要为每个构建类型(调试/发布)创建单独的文件夹,在每个构建类型上运行cmake,并为调试/发布配置生成单独的makefile.是否可以使用cmake创建一个单独的makefile,它同时支持调试/发布配置,当我们实际运行"make"时,将为中间产品和最终产品(如dll,exe)创建单独的文件夹.

c c++ cmake

13
推荐指数
2
解决办法
6457
查看次数

CMake:add_custom_command与PRE_BUILD不起作用

在下面的CMakeLists.txt文件中,虽然我已经设置了add_custom_commandPRE_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_commandadd_custom_targetadd_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)

c++ linux cmake add-custom-command

2
推荐指数
1
解决办法
1432
查看次数

标签 统计

c++ ×2

cmake ×2

add-custom-command ×1

c ×1

linux ×1