CMake 專案裡 include .cmake 檔案

本篇介紹在 CMake 專案裡 include .cmake 檔案,
在 CMakeLists.txt 同一層新建一個 cmake 資料夾, 把 abc.cmake 放到 cmake 資料夾底下,
在 CMakeLists.txt 新增以下幾行:

1
2
3
include(cmake/abc.cmake)
#set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
#find_package(abc)

之後再打 cmake 便會引入 abc.cmake 的 rules 了.

相關文章
撰寫 cmake 的 CMakeLists.txt
Windows 編譯 cmake-gui

Eclipse 索引(index)額外的定義

有時候程式碼裡頭有很多定義, 有些定義預設沒開(如下), Eclipse 不會對裡頭進行索引,

1
2
3
4
5
#ifdef USE_FEATURE_A
int feature_a(...) {
some = code(here);
}
#endif

所以這區塊的程式碼是沒有語法高亮的,
但如果是要寫(或閱讀) USE_FEATURE_A 裡面的 code 時,
開啟這個定義讓 Eclipse 去索引裡面的程式碼或使用自動完成功能, 會方便快速很多!!!

方法如下:
點選專案的 Properties -> C/C++ General -> Paths and Symbols 頁面,
在 Symbols 分頁 依照你的語言 (C/C++) 點選 Add 按鈕,
在 Name 欄位輸入 USE_FEATURE_A, 之後再用 Eclipse 索引一次就可以了.

另外, 如果是下列情況, 只需在 Value 欄位 輸入 1 即可.

1
2
3
4
5
#if (USE_FEATURE_A == 1)
int feature_a(...) {
some = code(here);
}
#endif

參考
How can I get Eclipse to index code inside #ifdef … #endif

相關主題
Eclipse 啟用 C++11 語法高亮與解析
Eclipse 常用快捷鍵

Linux 7z 檔案分割指令

本篇記錄一下 Linux 如何用 7zip 分割壓縮檔,7z 分割指令在某些情況下非常方便好用,例如:需要把大容量檔案塞進隨身碟,但因為隨身碟檔案格式是FAT32(單檔最大限制為4G),裡面又有其他東西暫時無法移出,或因為 Windows / macOS / Linux 通用的檔案系統關係只能選FAT32,
這時 Linux 就可以用 7z 分割壓縮檔的技巧將壓縮檔分割成若干個小檔案,之後在合併起來。
以下為 Linux 7z 分割壓縮檔的使用方式,將大檔案分割成若干個 2G 檔案,

1
$ 7z a -mx0 -v2048m <filename> <file_to_be_compressed/directory_to_be_compressed>

-mx0 : 壓縮等級,0 表示複製模式
-v2048m : 分割成 2048MB 檔案大小,要分割成 1G 的話就改成 1024MB

實際範例

1
2
3
$ date '+%Y-%m-%d %H:%M:%S' # 壓縮前印一下時間
$ 7z a -m0=lzma2 -mx=0 -t7z -v2048m archive.7z <file_to_be_compressed/directory_to_be_compressed>
$ date '+%Y-%m-%d %H:%M:%S' # 壓縮後印一下時間

其它參考
Splitting files with 7zip without compression
https://myotragusbalearicus.wordpress.com/2013/01/11/splitting-files-with-7zip-without-compression/)
How to Split a File Using 7-Zip | Web Hosting Hub
https://www.webhostinghub.com/help/learn/website/managing-files/split-file
Windows 7zip gui 分割檔案

其它相關文章推薦
Linux 7z 壓縮/解壓縮用法與範例
Linux 常用指令教學懶人包
Linux sed 字串取代用法與範例
Linux find 尋找檔案/尋找資料夾用法與範例
Linux cut 字串處理用法與範例
Linux grep/ack/ag 搜尋字串用法與範例

Ubuntu 關閉 UTC 時鐘,避免和 Windows 時間錯亂

本篇介紹在 Ubuntu 關閉 UTC 時鐘,避免 Ubuntu 和 Windows 時間不同而錯亂,
灌 Windows 和 Ubuntu 雙系統的人一定常常遇到”重開機另外一個作業系統時間就亂了”這個問題,透過以下指令解決這惱人問題吧!

關閉 UTC 時鐘,避免 Ubuntu 和 Windows 時間不同而錯亂

1
sudo timedatectl set-local-rtc 1 --adjust-system-clock

參考
帶著走的開發環境 - 把 Ubuntu 裝到 USB | Jayce 的共享記憶體
https://blog.jaycetyle.com/2018/03/ubuntu-on-usb/
How to fix time modification on your computer with dual boot (Windows 10 and Ubuntu 18.04) | Our Code World
https://ourcodeworld.com/articles/read/1063/how-to-fix-time-modification-on-your-computer-with-dual-boot-windows-10-and-ubuntu-18-04
windows - Clock time is off on dual boot - Ask Ubuntu
https://askubuntu.com/questions/169376/clock-time-is-off-on-dual-boot

將 Ubuntu Linux 安裝在 USB 隨身碟

本篇介紹如何把 Ubuntu Linux 安裝在 USB 隨身碟,以便可以在別台電腦安裝 Ubuntu。

工作環境: ubuntu 16.04
使用到的工具:

  • unetbootin 程式
  • ubuntu-16.04.5-desktop-amd64.iso (存檔測試失敗)
  • ubuntu-18.04.1-desktop-amd64.iso (存檔測試失敗)
  • usb 隨身碟一隻

使用 disk 工具 將 usb 格式化

選擇 FAT 格式

再使用 unetbootin 把 ubuntu live iso 複製到 usb 上,
製作出來的 usb 就可以拿去別台電腦安裝 ubuntu,
若要有存檔的功能 在 Space used to preserve files across reboots 這裡加上大小(MB)
這裡示範 4G, 所以填上 4096.
再選擇 USB Drive 的位置 (如果 usb 在 unetbootin 啟動後才插上, 請重新啟動 unetbootin, 它不會動態偵測)

最後就大功告成了, 趕緊用 USB 開機試試吧!

其他類似方法:Universal USB Installer
Ubuntu 安裝 WinUSB(WoeUSB)
ubuntu(16.04) 建立 windows 啟動 usb 隨身碟:woeusb
http://ada-dreamer.blogspot.com/2018/07/ubuntu-liveusb.html
https://blog.jaycetyle.com/2018/03/ubuntu-on-usb/

Eclipse 匯入 cmake 專案

本篇要介紹如何使用 cmake 的 CMakeLists.txt 產生 Eclipse 的 project 專案檔,接著就可以用 Eclipse 匯入 cmake 產生出來的 Makefile。

使用 cmake 的產生 Eclipse 的專案檔

(Eclipse 對 out-of-source build 支援比較差, 所以就不建立 build 資料夾了)
直接在專案目錄下輸入以下指令產生 Makefile

1
2
3
4
cmake . \
-G "Eclipse CDT4 - Unix Makefiles" \
-DCMAKE_ECLIPSE_VERSION=4.5 \
-DCMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT=TRUE

File -> Import... -> C/C++ -> Existing Code as Makefile Project -> Next

選擇專案的 Makefile 所在位置的資料夾, 再依照需求選擇對應的 Toolchain
Browse... -> Linux GCC -> Finish

相關主題
Eclipse 啟用 C++11 語法高亮與解析
Eclipse 索引(index)額外的定義
Eclipse 常用快捷鍵

Eclipse 啟用 C++11 語法高亮與解析

本篇要介紹如何在 Eclipse 下啟用 C++11 的語法高亮解析,啟用後將可以跳至定義處以及不會出現紅色底線。

設定 Eclipse 的語法解析器

Window -> Preferences -> C/C++ -> Build -> Settings -> Discovery -> CDT GCC Build-in Compiler Settings
Command to get compiler specs: 底下的 text box 加上 -std=c++11

原本是

1
${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"

加上以後變成如下

1
${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}" -std=c++11

修改前如下圖所示:

修改後如下圖所示:

CMake project 設定方式

使用 cmake 產生出 Eclipse 的專案檔
(Eclipse 對 out-of-source build 支援比較差, 所以就不建立 build 資料夾了)
直接在專案目錄下輸入以下指令產生 Makefile

1
2
3
4
cmake . \
-G "Eclipse CDT4 - Unix Makefiles" \
-DCMAKE_ECLIPSE_VERSION=4.5 \
-DCMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT=TRUE

之後再 Eclipse 使用 import 的方式匯入專案
對專案右鍵選擇 Properties -> C/C++ General -> Preprocessor Include Paths, Marcos etc. -> Providers
啟用 CDT GCC Build-in Compiler Settings 且把它移到高過於 Contributed PathEntry Containers (重要)

修改後如下圖所示:

最後一步

重新產生索引檔, Project -> C/C++ Index -> Rebuild.

參考
c++ - How to enable C++11/C++0x support in Eclipse CDT? - Stack Overflow
https://stackoverflow.com/questions/9131763/how-to-enable-c11-c0x-support-in-eclipse-cdt/24561615

相關主題
Eclipse 匯入 cmake 專案
Eclipse 索引(index)額外的定義
Eclipse 常用快捷鍵

Python 使用 matplotlib 畫圖

本篇要介紹如何使用 python 搭配 matplotlib 模組將資料數據用圖形的方式呈現出來,用 matplotlib 來 plot 畫圖算是數據分析很常用到的輔助工具, 一定要學會,之後便用 python 行雲流水!

使用範例

下面為基本的畫圖範例,一組資料是水平的時間資料,另外一組資料是數據資料,
之後就可以使用 plot() 畫出這些數據,grid()是背景顯示格子狀,show() 是將圖顯示出來。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt

def main():
time = [1, 2, 3, 4]
data = [1, 4, 9, 16]
plt.plot(time, data, label='x')
plt.xlabel('time [second]')
plt.grid()
plt.legend()
plt.show()

pass

if __name__ == '__main__':
main()

畫出來的結果如下圖:

相關主題
Python 使用 numpy 讀取 csv 資料再畫圖

Ubuntu adb bash completion 自動完成

Ubuntu 16.04 安裝 bash-completion 以後, 很多指令都可以按 tab 自動完成,
但是有些指令就沒有支援到, 例如:adb
使得在 Android 開發上很不方便,
以下步驟為 ubuntu 安裝 adb 指令的自動完成:

  1. 安裝 bash-completion

    1
    sudo apt-get install bash-completion
  2. 下載 adb script

  3. 複製 android 腳本到 /etc/bash_completion.d 目錄下

    1
    sudo cp android /etc/bash_completion.d
  4. 重啟你的 shell, 就可以使用 adb 按 tab 自動完成了!

Android 安裝 Busybox (adb shell 使用 vi)

Android shell 裡預設沒有 vi 指令的工具, Android 系統去除了標準 Linux 的大多數工具,導致我們 Android 開發上與除錯時特別麻煩, 如果你的 android device 有 root 權限的話,
可以把編譯好的 busybox 推進去使用, 開發上會方便許多, 而且會節省很多時間。

以下內容將開始介紹如何在 Android 安裝 busybox,如果想要了解 busybox 的基本用法可以看這篇

busybox binaries 可以從 https://busybox.net/downloads/binaries/ 下載

查看 Android CPU 架構

可以藉由下列指令查看你的 Android CPU 架構然後下載對應的 busybox binary。

1
adb shell 'cat /proc/cpuinfo' | grep Processor

在 Android 安裝 busybox

我是下載 https://busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/busybox-armv8l,點下去如果沒有下載的話請滑鼠右鍵另存新檔來下載,
安裝前確認 Android 裡有無 /system/xbin 目錄, 本範例是把 busybox 安裝到 /system/xbin

1
2
3
4
5
6
adb root
adb remount

adb push busybox-armv8l /system/xbin/busybox
adb shell 'chmod 755 /system/xbin/busybox'
adb shell '/system/xbin/busybox --install /system/xbin/'

接下來就可以在 adb shell 裡使用 vi 指令了!!!
另外 find, grep, tee, sed, wget 這些工具也都包在裡面可以使用囉~

另外想查看 busybox 有支援什麼其他指令工具的話,可以直接輸入 busybox 指令看看結果。

在 Android 執行 busybox

以 top 指令為例,在 adb shell 下輸入 top 是用原本 Android 的 top (也就是 /system/bin/top),要改使用 busybox 的 top 話請改輸入 busybox top (也就是/system/xbin/top) 即可。

相關主題
BusyBox 基本用法教學
Android adb 基本用法教學