簡體   English   中英

隱藏gcc arguments到CMake文件

[英]Covert gcc arguments to CMake file

所以我正在嘗試學習 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

我不明白如何將 arguments "-DARCH=\"`uname -a`\""傳遞給 CMake。

訣竅是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}\""
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM