基础架构系列篇-基于C++与CMAKE的跨平台编译库加引用

基础架构系列篇-基于C++与CMAKE的跨平台编译

目录

  • 基本项目结构
  • -includes
    • ----test
    • --------Test.h
    • ----aws
    • --------core
    • --------s3
  • -libs
    • ----test
    • --------test.lib
    • ----aws
    • --------aws-cpp-sdk-core.lib
    • --------aws-cpp-sdk-core.dll
    • --------aws-cpp-sdk-s3.lib
    • --------aws-cpp-sdk-s3.dll
  • -src
    • ----main
    • --------CMakeProject1.h
    • --------CMakeProject1.cpp
    • --------CMakeLists.txt
    • ----test
    • --------Test.h
    • --------Test.cpp
    • --------CMakeLists.txt
    • ----CMakeList.txt
  • -CMakeList.txt

基本项目结构

基础架构系列篇-基于C++与CMAKE的跨平台编译库加引用_第1张图片

-includes

----test

--------Test.h

// CMakeProject1.h: 标准系统包含文件的包含文件
// 或项目特定的包含文件。

#pragma once

#include 

// TODO: 在此处引用程序需要的其他标头。

void test();

----aws

--------core

--------s3

-libs

----test

--------test.lib

----aws

--------aws-cpp-sdk-core.lib

--------aws-cpp-sdk-core.dll

--------aws-cpp-sdk-s3.lib

--------aws-cpp-sdk-s3.dll

-src

----main

--------CMakeProject1.h

// CMakeProject1.h: 标准系统包含文件的包含文件
// 或项目特定的包含文件。

#pragma once

#include 
#include "test/Test.h"
// TODO: 在此处引用程序需要的其他标头。
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
using namespace Aws::S3;
using namespace Aws::S3::Model;

--------CMakeProject1.cpp

// CMakeProject1.cpp: 定义应用程序的入口点。
//

#include "CMakeProject1.h"

using namespace std;

int main()
{
	cout << "Hello CMake." << endl;
	test();
	for (int k = 0; k < 5; k++)
	{
		cout << "Hello 测试." << endl;
	}

	system("pause");
	return 0;
}

int main1(int argc, char* argv[]) {
	cout << "Hello CMake." << endl;
	test();
	// 初始化
	Aws::SDKOptions options;
	options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Debug;
	Aws::InitAPI(options);

	Aws::Client::ClientConfiguration cfg;
	cfg.endpointOverride = "127.0.0.1:9000";
	cfg.scheme = Aws::Http::Scheme::HTTP;
	cfg.verifySSL = false;

	Aws::Auth::AWSCredentials cred("key", "secret");
	S3Client client(cred, cfg,
		Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Always, false);

	auto response = client.ListBuckets();
	cout<< "response.IsSuccess()=" << response.IsSuccess() << endl;
	if (response.IsSuccess()) {
		auto buckets = response.GetResult().GetBuckets();
	}
	else {
		cout << "Error while ListBuckets " << response.GetError().GetExceptionName()
			<< " " << response.GetError().GetMessage() << endl;
	}
	Aws::ShutdownAPI(options);
	getchar();
	return 0;
}

--------CMakeLists.txt

# CMakeList.txt: CMakeProject1 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
# 常用的测试用 MESSAGE 打印 例 MESSAGE("项目: 		  ${PROJECT_NAME}")  MESSAGE("路径: ${CMAKE_BINARY_DIR}")

cmake_minimum_required (VERSION 3.8)

project ("main")

MESSAGE("项目: ${PROJECT_NAME}")

#设置可执行文件打包路径
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY  "../../../../../bin/${PROJECT_NAME}/")  

include_directories(
    ../../includes
)

MESSAGE("路径CMAKE_BINARY_DIR=: ${CMAKE_BINARY_DIR}")

MESSAGE("PROJECT_SOURCE_DIR=: ${PROJECT_SOURCE_DIR}")

link_directories(  
    ${PROJECT_SOURCE_DIR}/../../libs/test
    "${PROJECT_SOURCE_DIR}/../../libs/awst"
)

# 将源代码添加到此项目的可执行文件。
add_executable (CMakeProject1 "CMakeProject1.cpp" "CMakeProject1.h" )

target_link_libraries(CMakeProject1  aws-cpp-sdk-core aws-cpp-sdk-s3 test)

target_link_libraries(CMakeProject1  aws-cpp-sdk-core aws-cpp-sdk-s3)

# TODO: 如有需要,请添加测试并安装目标。

----test

--------Test.h

// CMakeProject1.h: 标准系统包含文件的包含文件
// 或项目特定的包含文件。

#pragma once

#include 

// TODO: 在此处引用程序需要的其他标头。

void test();

--------Test.cpp

// Test.cpp: 定义应用程序的入口点。
//

#include "Test.h"

using namespace std;

void test()
{
    cout<< "测试静态库" << endl;
}

--------CMakeLists.txt

# CMakeList.txt: CMakeProject1 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#

cmake_minimum_required (VERSION 3.8)

project ("test")

MESSAGE("项目: ${PROJECT_NAME}")

#设置静态库打包路径
MESSAGE("静态库路径: ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY  "../../../../../libs/${PROJECT_NAME}/")   
MESSAGE("修改静态库路径: ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}")

# 将源代码添加到静态库
add_library (test STATIC Test.cpp Test.h)

# 或
# 将源代码添加到静态库add_library (test Test.cpp Test.h)

# TODO: 如有需要,请添加测试并安装目标。

----CMakeList.txt

# CMakeList.txt: CMakeProject1 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
# 常用的测试用 MESSAGE 打印 例 MESSAGE("项目: ${PROJECT_NAME}")  MESSAGE("路径: ${CMAKE_BINARY_DIR}")

cmake_minimum_required (VERSION 3.8)


project ("src")


MESSAGE("项目: ${PROJECT_NAME}")

# TODO: 如有需要,请添加测试并安装目标。

add_subdirectory("main")
add_subdirectory("test")

-CMakeList.txt

# CMakeList.txt: CMakeProject1 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
# 常用的测试用 MESSAGE 打印 例 MESSAGE("项目: ${PROJECT_NAME}")  MESSAGE("路径: ${CMAKE_BINARY_DIR}")

cmake_minimum_required (VERSION 3.8)

project ("CMakeProject1")

MESSAGE("项目: ${PROJECT_NAME}")

# TODO: 如有需要,请添加测试并安装目标。

add_subdirectory("src")

# 或
# add_subdirectory("src/main")
# add_subdirectory("src/test")

你可能感兴趣的:(架构,项目,跨平台编译,跨平台编译,c++,cmake)