ubuntu 下安装
su
密码
apt-get install cmake
第一次是eshell 下安装的
提示unable to initialize frontend
然后安装失败
切换到 terminal 下安装
这次ok
cmake --version
2.8.7的版本
可以借助cmake 自动生成makefile文件 自动生成windows vs 的工程
cmake 自身很简单,大大简化工程构建的工作。只要写了cmake文件,我就可以在linux下用,也可以在windows上用。
升级到 3.18.1
wget https://cmake.org/files/v3.18/cmake-3.18.1-Linux-x86_64.tar.gz
tar -xvf cmake-3.18.1-Linux-x86_64.tar.gz
#如果有装cmake 就先卸载
apt-get autoremove cmake
sudo mv cmake-3.18.1-Linux-x86_64/ /opt/cmake-3.18.1
sudo ln -sf /opt/cmake-3.18.1/bin/* /usr/bin/
用法
设置输出目录
set(BIN_DIR ${PROJECT_SOURCE_DIR}/bin)
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BIN_DIR} )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${BIN_DIR} )
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${BIN_DIR} )
设置包含目录
include_directories(${PROJECT_SOURCE_DIR}/3rd/)
添加编译路径
add_subdirectory(src)
加入目录下所有的文件
aux_source_directory("src/lib" lib_src)
生成程序
add_executable(hello-world ${ALL_SOURCES} ${lib_src})
加入库链接
target_link_libraries(jtrclient base mopcua ${SYS_LIBS})
生成库
add_library(mopcua ${interal_src} ${all_interface})
c++ 11
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()
各平台特殊添加不同命令
set(SYS_LIBS )
if(APPLE)
list(APPEND SYS_LIBS -lm -lpthread)
ADD_DEFINITIONS(
-DMACOS -g -Wunused-variable -Wunused-parameter -Wunused-function -Wunused
-Wno-deprecated -Wwrite-strings
)
elseif(UNIX)
list(APPEND SYS_LIBS -lm -lpthread)
ADD_DEFINITIONS(
-DUNIX -fPIC -Wunused-variable -Wunused-function -Wunused
-Wno-deprecated -Wwrite-strings
)
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunused-parameter")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-discarded-qualifiers")
elseif(WIN32)
list(APPEND SYS_LIBS wsock32 ws2_32)
ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -DHAVE_STRUCT_TIMESPEC "/wd4819" "/utf-8")
else()
endif()
添加宏并指定值
ADD_DEFINITIONS(-DUASDK_INCLUDE_DIRECTORY_WINDOWSX=1
-DUASDK_INCLUDE_LOCKS_CPP11=1
-DUASDK_INCLUDE_TIMERS_CPP11=1
-DUASDK_INCLUDE_ATOMIC_CPP11=1)
附录
几个实际的CMakeLists.txt 参考
cmake_minimum_required(VERSION 3.5)
project(lorasim)
set(SYS_LIBS gwsim_base)
if(APPLE)
list(APPEND SYS_LIBS -lm -lpthread)
ADD_DEFINITIONS(
-DMACOS -g -Wunused-variable -Wunused-parameter -Wunused-function -Wunused
-Wno-deprecated -Wwrite-strings
)
elseif(UNIX)
list(APPEND SYS_LIBS -lm -lpthread)
ADD_DEFINITIONS(
-DUNIX -g -fPIC -Wunused-variable -Wunused-parameter -Wunused-function -Wunused
-Wno-deprecated -Wwrite-strings
)
else()
list(APPEND SYS_LIBS wsock32 ws2_32)
ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -DHAVE_STRUCT_TIMESPEC)
endif()
set(BIN_DIR ${PROJECT_SOURCE_DIR}/bin)
set(GTEST_DIR ${PROJECT_SOURCE_DIR}/3rd/googletest/googletest)
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BIN_DIR} )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${BIN_DIR} )
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${BIN_DIR} )
foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${BIN_DIR} )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${BIN_DIR} )
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${BIN_DIR} )
message(STATUS CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG})
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )
include_directories(${PROJECT_SOURCE_DIR}/gateway/src)
include_directories(${PROJECT_SOURCE_DIR}/3rd)
include_directories(${PROJECT_SOURCE_DIR}/base)
add_subdirectory(3rd)
add_subdirectory(base)
add_subdirectory(gateway)
set(SRC main.c conf.c net.c net_udp.c up.c down.c gen_packet.c)
add_executable(gwsim ${SRC})
target_link_libraries(gwsim ${SYS_LIBS} gwsim_protocol gwsim_crypto)