Makefile

 Cmake指定生成目标路径

# 将本目录源文件名称名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)

# 生成链接库
add_library (ABC SHARED ${DIR_LIB_SRCS})

set(PATH /root)

# 设置动态库文件输出路径
set_target_properties(
ABC
PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PATH}
)

makefile 屏蔽输出 Entering/Leaving directory

makefile 屏蔽输出 Entering/Leaving directory - Swack

建立一个入口Makefile执行指定子目录中的Makefile

建立一个入口Makefile执行指定子目录中的Makefile_初心-CSDN博客_makefile 进入目录

cmake:环境变量(environment variable)读写和if判断

cmake:环境变量(environment variable)读写和if判断_10km的专栏-CSDN博客



CMakeLists文件中打印出里面定义的变量的值

CMakeLists文件中打印出里面定义的变量的值 - maycpou - 博客园

在Makefile中设置环境变量 

在Makefile中设置环境变量_weixin_34268610的博客-CSDN博客

Makefile:如何隐藏命令内容本身

Makefile:如何隐藏命令内容本身 - 简书

cmake 命令概述:

CMake常用命令_红超的吾记之谈_新浪博客

示例:

文件tree

//linux64
[ test]$ tree -I "modules"
.
├── test_Kernel          //代码路径
│   ├── test1            //示例子demo1-》编译成独立.so
│   │   ├── CMakeLists.txt   //该so的cmake文件
│   │   └── test.cc           
│   └── test2            //示例子demo2-》编译成独立.so
│       ├── CMakeLists.txt   //该so的cmake文件
│       └── test.cc
└── test_project         // 工程路径
    ├── config-user.mk       //子makefile 用于汇总所有需编译的 cmakelists.txt 的路径
    ├── GNUmakefile          //总的makefile, make命令默认执行
    └── linux64
        ├── lib              //存放生成的动态库
        │   ├── libtest1.so
        │   ├── libtest2.so
        │   └── systemc
        └── obj              //存放中间文件,包含cmake生成的makfile信息

test_kernel/test1/CMakelists.txt

cmake_minimum_required (VERSION 3.0)
project (test1)

aux_source_directory(. DIR_LIB_SRCS)

#MESSAGE("OBJ_PATH: " $ENV{OBJ_PATH})
set(PATH $ENV{OBJ_PATH})
#MESSAGE("PATH: " ${PATH})
#set(PATH /home/zhangyi10245050/simics_project/bk1_simics_project_master/Lads/test_project/build)
#add_compile_options(-std=c++14)
#add_compile_options(-fPIC -shared -g )
add_library(test1 SHARED ${DIR_LIB_SRCS})

set_target_properties(
test1
PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PATH}
PREFIX ""
)

#PREFIX "" #删除lib前缀

test_kernel/test2/CMakelists.txt

cmake_minimum_required (VERSION 3.0)
project (test1)

aux_source_directory(. DIR_LIB_SRCS)

#set(PATH /home/zhangyi10245050/simics_project/bk1_simics_project_master/Lads/test_project/build)
set(PATH $ENV{OBJ_PATH})
#add_compile_options(-std=c++14)
#add_compile_options(-fPIC -shared -g )
add_library(test2 SHARED ${DIR_LIB_SRCS})

set_target_properties(
test2
PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PATH}
)

test.cc

#include <stdio.h>
#include <stdlib.h>


double power(double base, int exponent)
{
    int result = base;
    int i;

    if (exponent == 0) {
        return 1;
    }
    
    for(i = 1; i < exponent; ++i){
        result = result * base;
    }

    return result;
}
/*
int main(int argc, char *argv[])
{
    if (argc < 3){
        printf("Usage: %s base exponent \n", argv[0]);
        return 1;
    }
    double base = atof(argv[1]);
    int exponent = atoi(argv[2]);
    double result = power(base, exponent);
    printf("%g ^ %d is %g\n", base, exponent, result);
    return 0;
}*/

test_project/config-user.mk





SIMICS_PROJECT:=$(PROJECT_DIR)
MODULE_DIRS_USER+=;$(SIMICS_PROJECT)/../test_Kernel/test1
#MODULE_DIRS_USER:=$(SIMICS_PROJECT)/../test_Kernel/test1
MODULE_DIRS_USER+=;$(SIMICS_PROJECT)/../test_Kernel/test2







$(info MODULE_DIRS_USER: $(MODULE_DIRS_USER))
_MODULES_QUALIFIED:=$(patsubst %/CMakeLists.txt,%,$(foreach d,$(subst ;, ,$(MODULE_DIRS_USER)),$(wildcard $(d)/CMakeLists.txt)))
$(info _MODULES_QUALIFIED: $(_MODULES_QUALIFIED))

test_project/GNUmakefile


MKDIRS = mkdir -p
CAT = cat
HOST_TYPE =./linux64

export PROJECT_DIR = $(shell pwd)
export OBJ_PATH=$(PROJECT_DIR)/$(HOST_TYPE)/lib

OBJ_MODULES=$(PROJECT_DIR)/$(HOST_TYPE)/obj/modules
MAKEFLAGS+= --no-print-directory

_say=$(info $(1))
_oneword = $(if $(word 2,$1),$(warning Duplicate module name $(notdir $(word 1,$1)), found as: $1))$(word 1,$1)

-include config-user.mk
#MODULES:=$(sort $(notdir $(_MODULES_QUALIFIED)))
MODULES:=$(notdir $(_MODULES_QUALIFIED))
#$(info MODULES: $(MODULES))



.PHONY: $(MODULES)
all:$(MODULES)
$(MODULES):%:
	$(call _say,=== Building module $@ ===)
	$(if $(wildcard $(OBJ_MODULES)/$@),,$(MKDIRS) $(OBJ_MODULES)/$@)
	@cmake $(call _oneword,$(filter %/$@,$(_MODULES_QUALIFIED))) -B $(OBJ_MODULES)/$@
	@$(MAKE) -C $(OBJ_MODULES)/$@

.PHONY: clean
clean:
	@echo Making clean
	@list='$(MODULES)'; for subdir in $$list; do \
		echo "Clean in $$subdir";\
		$(MAKE) -C $(OBJ_MODULES)/$$subdir clean;\
	done

.PHONY: clean_all
clean_all:
	@echo Making clean_all
	@list='$(MODULES)'; for subdir in $$list; do \
		echo "Clean in $$subdir";\
		rm -r $(OBJ_MODULES)/$$subdir;	\
	done
	

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值