CMakeLists和编译问题

1 CMakeLists结构

1.1 整体流程

mkdir build
cd build
cmake ..
make
./test

1.2 文件目录结构

.
├── build
├── CMakeLists.txt
├── A
│ └── CMakeLists.txt
│ └── C
│ │ ├── a.h
│ │ ├── a.cpp
│ │ ├── CMakeLists.txt
│ └── D
│ │ ├── c.h
│ │ ├── c.cpp
│ │ ├── CMakeLists.txt
└── B
├── CMakeLists.txt
└── main.cpp
从上到下的CMakeLists.txt分别为:

cmake_minimum_required(VERSION 3.16)
project(InteractiveGenRoughSol)

add_subdirectory(A)
add_subdirectory(B)
project(A)

add_subdirectory(C)
add_subdirectory(D)
project(C)

include_directories(
    .
    ${CMAKE_SOURCE_DIR}
)

set(HEADERS
    ${CMAKE_CURRENT_SOURCE_DIR}/a.h
)

set(SOURCE
    ${CMAKE_CURRENT_SOURCE_DIR}/a.cpp
)

add_library(C ${HEADERS} ${SOURCE})
project(D)

include_directories(
    .
    ${CMAKE_SOURCE_DIR}
)

set(HEADERS
    ${CMAKE_CURRENT_SOURCE_DIR}/c.h
)

set(SOURCE
    ${CMAKE_CURRENT_SOURCE_DIR}/b.cpp
)

add_library(D ${HEADERS} ${SOURCE})
project(B)

include_directories(
    .
    ${CMAKE_SOURCE_DIR}
)

set(TEST
    main.cpp
)
add_executable(test_scene ${TEST})
target_link_libraries(test_scene 
   C
   D
)

这种写法必须要有源文件,就是set(SOURCE)不能为空,否则可能报错CMake Error: CMake can not determine linker language for target;

1.3 利用protobuf生成pb.h和pb.cc

文件目录结构:
.
├── build
├── CMakeLists.txt
├── a_config.proto
└── main.cc
其中,CMakeLists.txt:

cmake_minimum_required(VERSION 3.16)
PROJECT (cppTest)
SET(SRC_LIST main.cc)

set(proto_dir ${CMAKE_CURRENT_SOURCE_DIR})
file(GLOB proto_files "${proto_dir}/*.proto")
message(STATUS "Proto Source Dir: ${proto_dir}")
message(STATUS "Proto Source Files: ${proto_files}")

find_package(Protobuf REQUIRED)
if(PROTOBUF_FOUND)
    message(STATUS "protobuf library found")
else()
    message(FATAL_ERROR "protobuf library is needed but cant be found")
endif()

include_directories(${PROTOBUF_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${proto_files})

add_executable(cppTest main.cc ${PROTO_SRCS} ${PROTO_HDRS})

target_link_libraries(cppTest ${PROTOBUF_LIBRARIES})

其中,main.cc:

int main()
{
    return 0;
}

步骤:

cd build
cmake ..
make
sudo install cppTest
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值