C++编译-链接
库有两种:
- 静态库:.a,.lib
- 动态库:.so,.dll
创建静态库:
静态链接
动态链接
Makefile
g++之前要有一个tab
main:main.o
g++ -o main main.cpp /usr/lib/libjsoncpp.a
Cmake
cmake_minimum_required ( VERSION 3.0)
project(hello)
include_directories(${CMAKE_CURRENT_LIST_DIR}/include)
link_directories(${CMAKE_CURRENT_LIST_DIR}/lib)
aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src ${hello_src})
add_executable(${PROJECT_NAME} ${hello_src})
target_link_libraries(${PROJECT_NAME} util)
set(CMAKE_CXX_COMPILER "clang++" ) # 显示指定使用的C++编译器
set(CMAKE_CXX_FLAGS "-std=c++11") # c++11
set(CMAKE_CXX_FLAGS "-g") # 调试信息
set(CMAKE_CXX_FLAGS "-Wall") # 开启所有警告
set(CMAKE_CXX_FLAGS_DEBUG "-O0" ) # 调试包不优化
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG " ) # release包优化
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Demo1)
# 指定生成目标
add_executable(Demo main.cc)
多个源文件
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 指定生成目标
add_executable(Demo ${DIR_SRCS})
生成链接库
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 生成链接库
add_library (MathFunctions ${DIR_LIB_SRCS})
显示编译选项
set(CMAKE_VERBOSE_MAKEFILE ON)
查找库
find_package(PkgConfig REQUIRED)
pkg_check_modules(JSONCPP jsoncpp)
link_libraries(${JSONCPP_LIBRARIES})
target_link_libraries(landmarks ${JSONCPP_LIBRARIES})
一些问题
- target_link_libraries要放到add_executable后面
CMake Error at CMakeLists.txt:11 (target_link_libraries):
Cannot specify link libraries for target "lwm2mclient" which is not built
by this project.
头文件
<>是指:/usr/include 目录