您好,登錄后才能下訂單哦!
這篇文章主要講解了“Cmake怎么使用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Cmake怎么使用”吧!
1、多個(gè)源文件,使用命令 aux_source_directory(dir var):
在上一篇文章最后結(jié)尾的時(shí)候,有一個(gè)問題,就是在同一目錄下面,有多個(gè)源文件的時(shí)候,這個(gè)時(shí)候你不能都往下面第三條命令里面一直手動(dòng)添加源文件,那工作效率多低?。?/p>
cmake_minimum_required(VERSION 2.8)
project(main)
add_executable(main main.c test1.c)
于是乎為了解決這種低效率的操作,在 cmake 里面有一條指令可以完全搞定這個(gè)問題;不過為了說明問題,在這之前我又添加了兩個(gè)文件:test2.c 和 test2.h:
root@txp-virtual-machine:/home/txp/test# ls
1 cmake_install.cmake main.c test1.h touch2.c
CMakeCache.txt CMakeLists.txt Makefile test2.c touch2.h
CMakeFiles main test1.c test2.h
test2.c內(nèi)容如下:
#include <stdio.h>
#include "test2.h"
void func1()
{
printf("i like the cmake\n");
}
test2.h內(nèi)容如下:
#ifndef _TEST2_H_
#define _TEST2_H_
void func1();
#endif
最后main.c里面調(diào)用了func1函數(shù):
#include <stdio.h>
#include "test1.h"
#include "test2.h"
int main(void)
{
func1();
func(8);
printf("TXP嵌入式\n");
return 0;
}
接下來我們的重點(diǎn)就來了,在cmake里面可以使用aux_source_directory(dir var)就可以搞定上面效率低的問題,接下來我們?cè)贑MakeLists.txt這樣操作:
cmake_minimum_required(VERSION 2.8)
project(main)
aux_source_directory(. SRC_LIST)
add_executable(main ${SRC_LIST})
然后再進(jìn)行編譯:
root@txp-virtual-machine:/home/txp/test# cmake .
-- Configuring done
-- Generating done
-- Build files have been written to: /home/txp/test
root@txp-virtual-machine:/home/txp/test# make
Scanning dependencies of target main
[ 25%] Building C object CMakeFiles/main.dir/main.c.o
[ 50%] Linking C executable main
root@txp-virtual-machine:/home/txp/test# ./main
i like the cmake
the b is 8
TXP嵌入式
說明:
aux_source_directory(. SRC_LIST):表示是把當(dāng)當(dāng)前目錄下的所有源文件都添加到源列表變量里面去,最后用add_executable(main ${SRC_LIST})把所有有用的源文件加工成目標(biāo)文件main。不過這方法也有他的缺點(diǎn),就是把當(dāng)前目錄下的源文件都添加到變量SRC_LIST,如果我們不需要一些沒有用的文件(只要拿到所需的源文件就行),可以進(jìn)行這樣操作:
cmake_minimum_required(VERSION 2.8)
project(main)
set(SRC_LIST
./main.c
./test1.c
./test2.c
)
add_executable(main ${SRC_LIST})
這樣是能夠通過編譯的:
root@txp-virtual-machine:/home/txp/test# cmake .
-- Configuring done
-- Generating done
-- Build files have been written to: /home/txp/test
root@txp-virtual-machine:/home/txp/test# make
[100%] Built target main
2、在上面的例子中,我們會(huì)發(fā)現(xiàn)同一目錄下源文件比較亂,所以在cmake里面有這樣的規(guī)則,可以把相同類型以及相關(guān)的源文件放到同一個(gè)目錄,比如說,現(xiàn)在我在test目錄下創(chuàng)建test1和test2兩個(gè)目錄文件,并同時(shí)把test1.c、test1.h、test2.c、test2.h分別放到這兩個(gè)目錄下去:
root@txp-virtual-machine:/home/txp/test# mkdir -p test1 test2
root@txp-virtual-machine:/home/txp/test# ls
@ CMakeFiles main test1 test2
1 cmake_install.cmake main.c test1.c test2.c
CMakeCache.txt CMakeLists.txt Makefile test1.h test2.h
然后把相關(guān)文件一到這兩個(gè)目錄文件下去:
root@txp-virtual-machine:/home/txp/test# mv test1.c test1.h test1
root@txp-virtual-machine:/home/txp/test# mv test2.c test2.h test2
root@txp-virtual-machine:/home/txp/test# ls
@ CMakeCache.txt cmake_install.cmake main Makefile test2
1 CMakeFiles CMakeLists.txt main.c test1
root@txp-virtual-machine:/home/txp/test# tree
├── cmake_install.cmake
├── CMakeLists.txt
├── main
├── main.c
├── Makefile
├── test1
│ ├── test1.c
│ └── test1.h
└── test2
├── test2.c
└── test2.h
然后這個(gè)時(shí)候要修改CMakeLists.txt里面的規(guī)則屬性了:
cmake_minimum_required(VERSION 2.8)
project(main)
include_directories(test1 test2)
aux_source_directory(test1 SRC_LIST)
aux_source_directory(test2 SRC_LIST1)
add_executable(main main.c ${SRC_LIST} ${SRC_LIST1})
然后編譯輸出,也是能夠通過的:
root@txp-virtual-machine:/home/txp/test# cmake .
-- Configuring done
-- Generating done
-- Build files have been written to: /home/txp/test
root@txp-virtual-machine:/home/txp/test# make
Scanning dependencies of target main
[ 25%] Building C object CMakeFiles/main.dir/main.c.o
[ 50%] Building C object CMakeFiles/main.dir/test1/test1.c.o
[ 75%] Building C object CMakeFiles/main.dir/test2/test2.c.o
[100%] Linking C executable main
[100%] Built target main
root@txp-virtual-machine:/home/txp/test# ls
@ CMakeCache.txt cmake_install.cmake main Makefile test2
1 CMakeFiles CMakeLists.txt main.c test1
root@txp-virtual-machine:/home/txp/test# ./main
i like the cmake
the b is 8
TXP嵌入式
感謝各位的閱讀,以上就是“Cmake怎么使用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Cmake怎么使用這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。