今まで避けてきた「CMake」に今さら挑戦するっていうちょっと恥ずい取り組み。
.cppとしながらも、中身はC的なソースコード。
./study2.cpp
相変わらずの、いきなりな感じ。まぁ詳しくは参考サイトを見てほしす。おじさんはただただ賢者の足跡をたどるのみ。 はいー。うまく行きましたよ。
参考サイトはこちら。すばらしい。CMakeはインストールされているとして、はじめてのCMakeプロジェクトをやってみる。
.cppとしながらも、中身はC的なソースコード。
ではビルドして実行してみる。
できた。
./buildの中にいろんなものがてきちゃうので、hello worldをCMakeでビルドするのは正義かどうか悩んじゃうけど、お勉強ですので。
こちら、説明とか一切書かずに参考サイトにもたれっきりの記事なので、次の項目までやる。
ここでは過去自力で作成したKeeloqを題材にする。
#include <stdio.h> #include <stdint.h> #include "keeloq/include/keeloq.hpp" int main(int argc,char** argv){ uint32_t pr=0xf741e2db; uint64_t kr=0x5cec6701b79fd949; uint32_t cr; cr=keeloq_enc(pr,kr); printf("%08X\n",cr); pr=keeloq_dec(cr,kr); printf("%08X\n",pr); return 0; }./CMakeLists.txt
cmake_minimum_required(VERSION 3.1) project(study2 CXX) add_subdirectory(./keeloq) add_executable(study2 study2.cpp) target_link_libraries(study2 keeloq)./keeloq/CMakeLists.txt
cmake_minimum_required(VERSION 3.1) project(keeloq_lib VERSION 1.0.0 DESCRIPTION "Keeloq library" LANGUAGES CXX) add_library(keeloq STATIC ./src/keeloq.cpp) #target_compile_features(keeloq PRIVATE cxx_std_11) target_include_directories(keeloq INTERFACE ./include) set_target_properties(keeloq PROPERTIES VERSION ${PROJECT_VERSION})./keeloq/include/keeloq.hpp
#ifndef _KEELOQ_H_ #define _KEELOQ_H_ #include <stdint.h> uint32_t keeloq_enc(uint32_t pr,uint64_t kr); uint32_t keeloq_dec(uint32_t cr,uint64_t kr); #endif./keeloq/src/keeloq.cpp
#include <stdint.h> uint32_t keeloq_enc(uint32_t pr,uint64_t kr){ uint32_t nlf_table=0x3a5c742e; uint32_t nlf_arg; uint32_t nlf; uint32_t newz; uint32_t i; for(i=0;i<528;i++){ nlf_arg=((pr&0x80000000)>>(31-4)) |((pr&0x04000000)>>(26-3)) |((pr&0x00100000)>>(20-2)) |((pr&0x00000200)>>(9-1)) |((pr&0x00000002)>>(1-0)); nlf=((nlf_table>>nlf_arg)&0x00000001); newz=nlf^((pr&0x00010000)>>16)^(pr&0x00000001)^(uint32_t)(kr&0x0000000000000001); pr=(newz<<31)|(pr>>1); kr=((kr&0x0000000000000001)<<63)|(kr>>1); } return pr; } uint32_t keeloq_dec(uint32_t cr,uint64_t kr){ uint32_t nlf_table=0x3a5c742e; uint32_t nlf_arg; uint32_t nlf; uint32_t newz; uint32_t i; for(i=0;i<528;i++){ nlf_arg=((cr&0x40000000)>>(30-4)) |((cr&0x02000000)>>(25-3)) |((cr&0x00080000)>>(19-2)) |((cr&0x00000100)>>(8-1)) |((cr&0x00000001)>>(0-0)); nlf=((nlf_table>>nlf_arg)&0x00000001); newz=nlf^((cr&0x00008000)>>15)^((cr&0x80000000)>>31)^(uint32_t)((kr&0x0000000000008000)>>15); cr=(cr<<1)|(newz); kr=((kr&0x8000000000000000)>>63)|(kr<<1); } return cr; }
相変わらずの、いきなりな感じ。まぁ詳しくは参考サイトを見てほしす。おじさんはただただ賢者の足跡をたどるのみ。 はいー。うまく行きましたよ。
イイネCMake。
コメントをお書きください