Open quinnwencn opened 4 months ago
在一些编译场景中,我们需要在编译前执行一些shell命令,这在Makefile中是非常常见的,但在CMake中很少涉及。CMake中执行命令常用的有:
execute_process
execute_process可以执行一个或者多个进程,它的定义为:
execute_process(COMMAND <cmd1> [args1...]] [COMMAND <cmd2> [args2...] [...]] [WORKING_DIRECTORY <directory>] [TIMEOUT <seconds>] [RESULT_VARIABLE <variable>] [OUTPUT_VARIABLE <variable>] [ERROR_VARIABLE <variable>] [INPUT_FILE <file>] [OUTPUT_FILE <file>] [ERROR_FILE <file>] [OUTPUT_QUIET] [ERROR_QUIET] [OUTPUT_STRIP_TRAILING_WHITESPACE] [ERROR_STRIP_TRAILING_WHITESPACE])
其中:
cd WORKING_DIRECTORY && COMMAND
execute_process(COMMAND rm -rf test_file WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) execute_process(COMMAND mkdir test_file WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) execute_process(COMMAND openssl genrsa -out root.key 2048 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test_file TIMEOUT 5)
对于产生文件后,需要在代码中引用,可也通过target_compile_definitions为代码中引入宏定义:
target_compile_definitions
target_compile_definitions( target PUBLIC MACRO_DEFINE="xxx")
例子:
target_compile_definitions(auth_test PUBLIC ROOT_KEY="${CMAKE_CURRENT_SOURCE_DIR}/test_file/root.key")
在一些编译场景中,我们需要在编译前执行一些shell命令,这在Makefile中是非常常见的,但在CMake中很少涉及。CMake中执行命令常用的有:
execute_process
execute_process
可以执行一个或者多个进程,它的定义为:其中:
cd WORKING_DIRECTORY && COMMAND
;对于产生文件后,需要在代码中引用,可也通过
target_compile_definitions
为代码中引入宏定义:例子: