cmake利用toolchain.cmake生成makefile之后,make生成靜態庫失敗問題


問題描述

利用toolchian.cmake設置好編譯器后,利用make指令生成靜態庫,出現以下問題

 Error running link command: No such file or directory

出錯原因,toolchain.cmake文件內沒有聲明靜態庫生成器AR;解決方式,在toolchian.cmake文件內添加下面的聲明

SET(CMAKE_AR  $(TOOLCHAIN_DIR)/bin/arm-linux-gnueabihf-ar CACHE FILEPATH "Archiver")

我之前的設置是

SET(CMAKE_AR  $(TOOLCHAIN_DIR)/bin/arm-linux-gnueabihf-ar)

仍然會報錯,在查看了cmake 的文檔后發現

Set Normal Variable
set(<variable> <value>... [PARENT_SCOPE])
Set the given <variable> in the current function or directory scope.

If the PARENT_SCOPE option is given the variable will be set in the scope above the current scope. Each new directory or function creates a new scope. This command will
set the value of a variable into the parent directory or calling function (whichever is applicable to the case at hand). The previous state of the variable’s value stays
the same in the current scope (e.g., if it was undefined before, it is still undefined and if it had a value, it is still that value).

Cache 變量

Set Cache Entry
set(<variable> <value>... CACHE <type> <docstring> [FORCE])
Set the given cache <variable> (cache entry). Since cache entries are meant to provide user-settable values this does not overwrite existing cache entries by default. 
Use the FORCE option to overwrite existing entries. The
<type> must be specified as one of: BOOL Boolean ON/OFF value. cmake-gui(1) offers a checkbox. FILEPATH Path to a file on disk. cmake-gui(1) offers a file dialog. PATH Path to a directory on disk. cmake-gui(1) offers a file dialog. STRING A line of text. cmake-gui(1) offers a text field or a drop-down selection if the STRINGS cache entry property is set. INTERNAL A line of text. cmake-gui(1) does not show internal entries. They may be used to store variables persistently across runs. Use of this type implies FORCE. The <docstring> must be specified as a line of text providing a quick summary of the option for presentation to cmake-gui(1) users. If the cache entry does not exist prior to the call or the FORCE option is given then the cache entry will be set to the given value. Furthermore, any normal variable
binding in the current scope will be removed to expose the newly cached value to any immediately following evaluation. It is possible for the cache entry to exist prior to the call but have no type set if it was created on the cmake(1) command line by a user through the -D<var>=<value>
option without specifying a type. In this case the set command will add the type. Furthermore, if the <type> is PATH or FILEPATH and the <value> provided on the command
line is a relative path, then the set command will treat the path as relative to the current working directory and convert it to an absolute path.

之后刪除build文件下的所有內容

rm -rf *

再次調用cmake生成makefile

cmake -DCMAKE_TOOLCHAIN_FILE=~/toolchain.cmake ../

編譯即可

make VERBOSE=1 -j5


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM