使用cmake传递变量并在C程序中打印
Pass variable using cmake and print it in C program
我正在尝试通过 C 代码获取提供给 cmake 调用的值,以便可以打印它。它应该像这样传递 cmake -DSTR="some text" ..
然后在 main.c 我会做类似 puts(STR)
的事情来打印它。
这是我目前在 CMakeLists.txt 中的内容,但它不起作用:
project(proj)
cmake_minimum_required(VERSION 3.0)
add_definitions(-DSTR)
add_executable(main main.c)
您可以使用 configure_file
和一个辅助文件来实现它。例如
// File: support_macros.h.in (auxiliary file)
// This file is generated by CMake. Don't edit it.
#define VAR "@VAR@"
// File: main.c
#include "support_macros.h"
#include <stdio>
int main()
{
puts(VAR);
// ...
}
# File: CMakeLists.txt
project(proj)
cmake_minimum_required(VERSION 3.0)
# Not needed
# add_definitions(-DSTR)
add_executable(main main.c)
# -- Generate support_macros.h from support_macros.h.in
set(IN_FILE "${CMAKE_SOURCE_DIR}/support_macros.h.in")
set(GENERATED_FILE_PATH "${CMAKE_BINARY_DIR}/GeneratedFiles")
set(OUT_FILE "${GENERATED_FILE_PATH}/support_macros.h")
configure_file("${IN_FILE}" "${OUT_FILE}" @ONLY)
# -- Make sure main.c will be able to include support_macros.h
target_include_directories(main PRIVATE "${GENERATED_FILE_PATH}")
然后,调用 cmake
为 VAR
传递一个值:
$ cmake .. -DVAR="some text"
注意: 通过在 support_macros.h.in
中的 @VAR@
周围加上引号,即使您不传递值,您的 main.c
也会编译对于 VAR
到 cmake
.
如果你想使用puts(STR)
,那么STR
里面必须有"
。您必须传递带有嵌入引号的变量值。对于简单的情况:
project(proj)
cmake_minimum_required(VERSION 3.0)
add_definitions( "STR=\"${STR}\"" )
add_executable(main main.c)
我正在尝试通过 C 代码获取提供给 cmake 调用的值,以便可以打印它。它应该像这样传递 cmake -DSTR="some text" ..
然后在 main.c 我会做类似 puts(STR)
的事情来打印它。
这是我目前在 CMakeLists.txt 中的内容,但它不起作用:
project(proj)
cmake_minimum_required(VERSION 3.0)
add_definitions(-DSTR)
add_executable(main main.c)
您可以使用 configure_file
和一个辅助文件来实现它。例如
// File: support_macros.h.in (auxiliary file)
// This file is generated by CMake. Don't edit it.
#define VAR "@VAR@"
// File: main.c
#include "support_macros.h"
#include <stdio>
int main()
{
puts(VAR);
// ...
}
# File: CMakeLists.txt
project(proj)
cmake_minimum_required(VERSION 3.0)
# Not needed
# add_definitions(-DSTR)
add_executable(main main.c)
# -- Generate support_macros.h from support_macros.h.in
set(IN_FILE "${CMAKE_SOURCE_DIR}/support_macros.h.in")
set(GENERATED_FILE_PATH "${CMAKE_BINARY_DIR}/GeneratedFiles")
set(OUT_FILE "${GENERATED_FILE_PATH}/support_macros.h")
configure_file("${IN_FILE}" "${OUT_FILE}" @ONLY)
# -- Make sure main.c will be able to include support_macros.h
target_include_directories(main PRIVATE "${GENERATED_FILE_PATH}")
然后,调用 cmake
为 VAR
传递一个值:
$ cmake .. -DVAR="some text"
注意: 通过在 support_macros.h.in
中的 @VAR@
周围加上引号,即使您不传递值,您的 main.c
也会编译对于 VAR
到 cmake
.
如果你想使用puts(STR)
,那么STR
里面必须有"
。您必须传递带有嵌入引号的变量值。对于简单的情况:
project(proj)
cmake_minimum_required(VERSION 3.0)
add_definitions( "STR=\"${STR}\"" )
add_executable(main main.c)