导入外部资源自定义编译规则
不打印执行命令 执行本地shell文件MakeFile传参CMake传参
导入外部资源通过 include 导入外部资源
例如新建 Rules.mk 文件,文件如下
Project_Root_Dir = $(CURDIR)
新建 makefile 文件,通过 include 导入外部资源
include Rules.mk .PHONY: help all info自定义编译规则
通过伪目标自定义编译规则
include Rules.mk .PHONY: help all info help: echo -e "33[36;1m ## Make Command List : 33[0m" all: info:
当执行 make 的时候由于没有目标,将会执行第一个伪目标
$ make echo -e "33[36;1m ## Make Command List : 33[0m" ## Make Command List :不打印执行命令
在执行 makefile 命令是往往会打印很多没必要的信息
通过添加 @ 符号过滤掉执行命令
include Rules.mk .PHONY: help all info help: @echo -e "33[36;1m ## Make Command List : 33[0m" all: info:
当执行 make 命令时,忽略打印执行命令
$ make ## Make Command List :执行本地shell文件
往往 makefile 需要外部执行一些 *** 作或者划分模块,需要在伪目标中执行 shell 命令。
find /home/ubuntu/makefile -name "*.sh" -exec echo {} ;
该命令通过查找某目录下的shell文件并输出该shell文件
同样我们可以执行该shell文件
find /home/ubuntu/makefile -name "*.sh" -exec sh {} ;
当然也可以先给文件添加可执行权限再执行
find /home/ubuntu/makefile -name "*.sh" -exec chmod +x {} ; -exec sh {} ;MakeFile传参
在编译libevent-2.0.22-stable的时候发现搜索库路径不是主makefile的指定路径
需要给目标makefile进行传参
sed -i '/CFLAGS = /aCFLAGS += -I${DE_Bin}/include' $(DE_Root_Dir)/$(libevent_name)/Makefile
其中
DE_Bin = /home/dengzr/DA/bsrDA_PlatAll/env/bin/linux-x64/
DE_Root_Dir = /home/dengzr/DA/bsrDA_PlatAll/env/
在执行主makefile的时候执行的命令为
sed -i '/CFLAGS = /aCFLAGS += -I/home/dengzr/DA/bsrDA_PlatAll/env/bin/linux-x64/include' /home/dengzr/DA/bsrDA_PlatAll/env/libevent-2.0.22-stable/Makefile
需要指定搜索库路径
LDFLAGS参数
gcc 等编译器会用到的一些优化参数,也可以在里面指定库文件的位置
sed -i '/LDFLAGS = /aLDFLAGS += ${DE_Bin}/lib/libssl.a ${DE_Bin}/lib/libcrypto.a' $(DE_Root_Dir)/$(libevent_name)/MakefileCMake传参
cmake ../ -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=${DE_Bin} -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_FIND_ROOT_PATH=${DE_Bin} -DZLIB_INCLUDE_DIR=${DE_Bin}/include -DCMAKE_C_COMPILER=${CC} -DCMAKE_CXX_COMPILER=${CXX} -Dprotobuf_BUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release
DE_Bin = /home/dengzr/DA/bsrDA_PlatAll/env/bin/linux-x64
libcurl编译
libcurl_conf_a: cd $(DE_Root_Dir)/$(libcurl_name); mkdir -p build; cd build; cmake ../ -DCMAKE_INSTALL_PREFIX=${DE_Bin} -DCMAKE_C_COMPILER=${CC} -DCMAKE_CXX_COMPILER=${CXX} -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -fPIC -fvisibility=default" -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fPIC -fvisibility=default" -DCMAKE_FIND_ROOT_PATH=${DE_Bin} -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DVISIBILITY_INLINES_HIDDEN=OFF -DCURL_DISABLE_LDAP=ON -DCURL_DISABLE_LDAPS=ON # 匹配 'ifdef CURL_STATICLIB' 下一行进行替换 CURL_EXTERN = CURL_EXTERN __attribute__ ((visibility("default"))) sed -i '/ifdef CURL_STATICLIB/{n;s/CURL_EXTERN/CURL_EXTERN __attribute__ ((visibility("default")))/;}' $(DE_Root_Dir)/$(libcurl_name)/include/curl/curl.h
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)