CLion默认使用Cmake作为工程构建工具,使用CLion还得先学这个吗……
学习教程
Cmake实践的介绍比较详细,但是我即使照着一步步做还是炸了。
坑点
在t4编译成功之后无法运行./src/main
,报错:error while loading shred libraries: libhello.so.1: cannot open shared objedct file: No such file or directory
解决办法
运行sudo ldconfig
重新建立链接,原因暂时还没想懂,莫非系统缓存了所有动态链接库?
创建动态库工程(外部构建)
- 创建
lib
目录和build
目录 - 主文件夹下写工程文件
CMakeLists.txt
如下:1
2PROJECT(HELLOLIB)
ADD_SUBDIRECTORY(lib) lib
文件夹下写文件hello.c
和hello.h
,具体自己想lib
文件夹下写工程文件CMakeLists.txt
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19SET(LIBHELLO_SRC hello.c)
#分别生成动态库和静态库
ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})
ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC})
#重命名hello_static 为hello,统一输出文件的名字
SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")
#设置版本号
SET_TARGET_PROPERITES(hello PROPERTIES VERSION 1.2 SOVERSION 1)
#配置install
#LIBRARY DESTINATION 为动态库
#ARCHIVE DESTINATION 为静态库
INSTALL(TARGETS hello hello_static
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
INSTALL(FILES hello.h DESTINATION include/hello)- 在
build
文件夹下cmake ..
生成makefiles,然后make
+make install
安装
在工程中引用自己的动态库
- 创建工程文件夹,
src
目录和build
目录 - 主文件夹下写工程文件
CMakeLists.txt
如下:1
2PROJECT(HELLOLIB)
ADD_SUBDIRECTORY(src) src
文件夹写文件main.c
src
文件夹下写工程文件CMakeLists.txt
:1
2
3
4
5
6
7INCLUDE_DIRECTORIES(/usr/include/hello)
ADD_EXECUTABLE(main main.c)
FIND_PATH(myHeader hello.h)
IF(myHeader)
INCLUDE_DIRECTORIES(${myHeader})
ENDIF(myHeader)
TARGET_LINK_LIBRARIES(main hello)
基本语句格式
PROJECT(projectname [CXX] [C] [Java])
SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
MESSAGE([SEND_ERROR|STATUS|FATAL_ERROR] “message to display” …)
变量使用${}方式取值,但是在IF控制语句中是直接使用变量名
ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])