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.csrc文件夹下写工程文件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])