Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 在后期生成步骤调用宏或函数_Cmake - Fatal编程技术网

Cmake 在后期生成步骤调用宏或函数

Cmake 在后期生成步骤调用宏或函数,cmake,Cmake,CMake的add_custom_command()允许用户在构建目标之前或之后(使用PRE_BUILD,PRE_LINK和POST_BUILD)运行命令(通过command选项)。该命令可以是可执行或外部“脚本”,但不能是CMake宏/函数 是否有类似的命令,如add_custom_command(),它允许传递CMake函数/宏,并在构建目标之前/之后对其进行调度? 如果没有,除了使用启用函数/宏内部功能的标志将命令作为CMake的重新运行外,还有哪些选项 [编辑]函数/宏将采用CMake目

CMake的
add_custom_command()
允许用户在构建目标之前或之后(使用
PRE_BUILD
PRE_LINK
POST_BUILD
)运行命令(通过
command
选项)。该命令可以是可执行或外部“脚本”,但不能是CMake宏/函数

是否有类似的命令,如
add_custom_command()
,它允许传递CMake函数/宏,并在构建目标之前/之后对其进行调度? 如果没有,除了使用启用函数/宏内部功能的标志将
命令
作为CMake的重新运行外,还有哪些选项

[编辑]函数/宏将采用CMake目标名称和特定于目标的目录路径作为输入。

该命令可以是CMake宏或函数。您只需将其封装在CMake文件中。CMake支持以脚本的形式运行进一步的CMake代码,并使用。您也可以使用
-D
选项向函数传递参数。对于本例,我们将传递两个参数,
TARGET\u NAME
TARGET\u PATH

# Define the executable target.
add_executable(MyExecutable ${MY_SRCS})

add_custom_command(TARGET MyExecutable
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} 
        -DTARGET_NAME=MyExecutable
        -DTARGET_PATH=${CMAKE_CURRENT_SOURCE_DIR}
        -P ${CMAKE_SOURCE_DIR}/my_script.cmake
    COMMENT "Running script..."
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
my_script.cmake
文件可以包含一个或多个预定义的cmake函数,然后调用这些函数,如下所示:

include(my_function.cmake)
# Call the function, passing the arguments we defined in add_custom_command.
my_function(${TARGET_NAME} ${TARGET_PATH})
# My CMake function.
function(my_function target_name target_path)
    message("Target name: ${target_name}")
    message("Target directory: ${target_path}")
endfunction()
为了完整性起见,CMake函数
my_函数
可以如下所示:

include(my_function.cmake)
# Call the function, passing the arguments we defined in add_custom_command.
my_function(${TARGET_NAME} ${TARGET_PATH})
# My CMake function.
function(my_function target_name target_path)
    message("Target name: ${target_name}")
    message("Target directory: ${target_path}")
endfunction()

回答得很好,谢谢!如果有人知道为什么这个用例没有这样一个内置的CMake命令,那就很好地学习了。@MariusCH:“为什么这个用例没有这样一个内置的CMake命令”—请参见重复问题的答案:。@Tsyvarev:谢谢你的链接并将其标记为重复。