clion 通用 Cmake

clion setting

1.setting -> build -> cmake -> cmake options
	-DCMAKE_TOOLCHAIN_FILE=./build/arch/arm-linux-cross-compile.cmake
	-DCMAKE_INSTALL_PREFIX=/home/xxx/app
	-DCMAKE_EXPORT_COMPILE_COMMANDS=ON   会在 build\target 目录下生成 compile-command.json,包含各个文件编译命令,用于 debug


2.setting -> build -> cmake -> build directory
	build\target

3.Cache variables
	cmake 加载之后可以查看

4. 添加 TODO
	// TODO 方便快速定位找到的位置

5. 映射,自动上传
	- 映射
		setting -> build -> Deployment
			1. + 新建映射环境,mappings -> Deployment path
			2. 右键 环境 -> use as default
			3. excluded paths 排除映射的文件
	- 自动上传
		deployment -> options
			- upload file to default server =>  never -> always
				delete remote file when local are deleted
			- create empty directories
			- delte target items when ones


6. 从 git 新建项目
	file -> new -> project from version control
		填 git 路径即可

7. Clion 使用环境变量
	修改 /etc/environment, 添加 PATH=$PATH:/xxx 即可

8. toolchain
	setting -> build -> toolchain
	1. setting 符号 -> 添加 ssh 环境
	2. + -> 添加 toolchain

9. 选择工具链
	2.setting -> build -> cmake -> toolchain
		选择刚刚建的即可

文件结构

build
	arch
		arm-linux-cross-compile.cmake
	cmake
	    add_definitions.cmake
	target

include

lib
	test
		inc
		src
		CMakeLists.txt

app
	thrift
		inc
		src
		CMakeLists.txt

CMakeLists.txt

文件内容

arm-linux-cross-compile.cmake

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)

SET(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)

SET(CMAKE_FIND_ROOT_PATH /home/xxx/linux/tool/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf)


SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)

SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")  # For C code
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")  # For C++ code

SET(THRIFT_DIR /home/wjxh/linux/3rd/tool/thrift)
SET(OPENSSL_DIR /home/wjxh/linux/3rd/tool/openssl)

add_definitions.cmake

# add_definitions(-D_GNU_SOURCE)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")  # For C code
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")  # For C++ code

# -g 不加没有行号
# -rdynamic 不加没有函数名
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -rdynamic -Wl,-rpath=.")

CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 3.14)
PROJECT(app)
INCLUDE(build/arch/add_definite.cmake)

INCLUDE_DIRECTORIES(include)
LINK_DIRECTORIES(lib)

ADD_SUBDIRECTORY(app)
ADD_SUBDIRECTORY(lib)

次CMakeLists.txt - executable

AUX_SOURCE_DIRECTORY(src SRC)
ADD_EXECUTABLE(timer ${SRC})
INSTALL(TARGETS timer DESTINATION app)

次CMakeLists.txt - library

AUX_SOURCE_DIRECTORY(src SRC)
ADD_LIBRARY(timer SHARED ${SRC})
INSTALL(TARGETS timer DESTINATION app)

通用 CMakeLists.txt

  • 将所有文件全部编译
# 将所有目录添加到所有路径
MACRO(get_subdir dir)
    FILE(GLOB_RECURSE FILES_AND_DIRS LIST_DIRECTORIES true "${dir}/*")
    FOREACH(FILE_OR_DIR ${FILES_AND_DIRS})
        IF(IS_DIRECTORY ${FILE_OR_DIR})
            LIST(APPEND INCS ${FILE_OR_DIR})
        ENDIF()
    ENDFOREACH()
ENDMACRO()

# 将所有文件添加到 可执行文件
MACRO(get_src dir)
    FILE(GLOB_RECURSE VCMU_SRC_ ./${dir}/*.c ./${dir}/*.cpp ./${dir}/*.h)
    LIST(APPEND VCMU_SRC ${VCMU_SRC_})
ENDMACRO()

INCLUDE_DIRECTORIES(${INCS})
ADD_EXECUTABLE(vcmu ${VCMU_SRC})
posted @ 2023-08-16 02:07  chumoath  阅读(169)  评论(0)    收藏  举报