【问题标题】:Covert gcc arguments to CMake file将 gcc 参数隐藏到 CMake 文件
【发布时间】:2020-09-02 00:02:10
【问题描述】:

所以我正在尝试学习 CMake,我想转换以下内容

gcc "-DARCH=\"`uname -a`\"" cli_arch.c arch.c 

到 CMakeLists.txt 文件。

这是我目前得到的:

运行cmake -DCMAKE_C_COMPILER=/usr/bin/gcc "-DARCH=\"`uname -a`\"" ..

// CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(cli_arch)


add_executable(cli_arch cli_arch.c arch.c)

我得到的结果是:

-- The C compiler identification is AppleClang 11.0.3.11030032
-- The CXX compiler identification is AppleClang 11.0.3.11030032
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    ARCH

我不明白如何将参数 "-DARCH=\"`uname -a`\"" 传递给 CMake。

【问题讨论】:

  • 您希望 cmake 调用 uname,还是希望该调用的结果由调用它的人传递给 cmake?
  • 我想将该调用的结果传递到程序中,所以 cmake?基本上我有一个只打印编译器拱门的程序。所以像这样:printf("Hello, my architecture is %s\n", ARCH);

标签: c++ c gcc makefile cmake


【解决方案1】:

诀窍是execute_process

execute_process(COMMAND uname -s
    OUTPUT_VARIABLE uname_output
    OUTPUT_STRIP_TRAILING_WHITESPACE
)

add_executable(cli_arch cli_arch.c arch.c)
target_compile_definitions(cli_arch
    PRIVATE "-DARCH=\"${uname_output}\""
)

我不得不使用uname -s,因为至少在我的系统上,uname -a 有一个 #,gcc 拒绝通过命令行在宏中接受。

编辑,因为您更改了问题。您将 ARCH 传递给 cmake 但不会做任何事情。您可以使用我上面提到的 target_compile_definitions 行来传递参数。

$ cmake -DARCH2=foo .
$ make
$ ./a 
Linux
foo

新的CMakeLists.txt 的相关部分如下所示:

target_compile_definitions(a
    PRIVATE "-DARCH=\"${uname_output}\""
    PRIVATE "-DARCH2=\"${ARCH2}\""
)

【讨论】:

    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    相关资源
    最近更新 更多