Cmake

make

代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(build)。

Make是最常用的构建工具,诞生于1977年,主要用于C语言的项目。但是实际上 ,任何只要某个文件有变化,就要重新构建的项目,都可以用Make构建。


比如要做出a.txt,你可以

make a.txt

当然,此处这条命令没法执行,你还要告诉make怎么制作a.txt

比如,假设文件 a.txt 依赖于 b.txt 和 c.txt ,那么,make 需要知道下面的规则。

a.txt: b.txt c.txt

像这样的规则,都写在一个叫做Makefile的文件中,Make命令依赖这个文件进行构建。

那么,怎么写makefile呢?

makefile

<target> : <prerequisites> 
[tab]  <commands>

上面第一行冒号前面的部分,叫做”目标”(target),冒号后面的部分叫做”前置条件”(prerequisites);第二行必须由一个tab键起首,后面跟着”命令”(commands)。

一个目标(target)就构成一条规则。目标通常是文件名,指明Make命令所要构建的对象,比如上文的 a.txt 。目标可以是一个文件名,也可以是多个文件名,之间用空格分隔。

.除了文件名,目标还可以是某个操作的名字,这称为”伪目标”(phony target)。

clean:
      rm *.o

上面代码的目标是clean,它不是文件名,而是一个操作的名字,属于”伪目标 “,作用是删除对象文件。如果正好有文件叫clean,可以这样:

.PHONY: clean
clean:
        rm *.o temp

 前置条件(prerequisites)

前置条件通常是一组文件名,之间用空格分隔。它指定了”目标”是否重新构建的判断标准:只要有一个前置文件不存在,或者有过更新(前置文件的last-modification时间戳比目标的时间戳新),”目标”就需要重新构建。

cmake

它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。显然,CMake 是一个比上述几种 make 更高级的编译配置工具

  1. cmake_minimum_required:指定运行此配置文件所需的 CMake 的最低版本;
  2. project:参数值是 Demo1,该命令表示项目的名称是 Demo1 。
  3. add_executable: 将名为 main.cc 的源文件编译成一个名称为 Demo 的可执行文件。
project(json_example)                                                              #项目名称            
                                                                
add_library (cJson_lib  cJSON.h cJSON.c)                                                    #添加lib            
                                                                
set(main_files main.c)                                                              #设置搭配文件            
add_executable(main_example ${main_files})                                                    #在搭配文件上,新增程序            main_example
target_link_libraries(main_example cJson_lib m)                                                 #在程序上,链接lib            
                                                                
set(create_files create.c)                                                                      #设置搭配文件            
add_executable(create_example ${create_files})                                                          #在搭配文件上,新增程序            create_example
target_link_libraries(create_example cJson_lib m)                                                    #在程序上,链接lib            
                                                                
set(test_files test.c)                                                                      #设置搭配文件            
add_executable(test_example ${test_files})                                                           #在搭配文件上,新增程序            test_example
target_link_libraries(test_example cJson_lib m)                                                    #在程序上,链接lib   

 

#添加外部文件夹
if(NOT OUT-DIR)                
    set( OUT-DIR /home/test/CWork/OutDir/)    #定义OUT-DIR位置
endif()
if( IS_DIRECTORY ${OUT-DIR} )
    add_subdirectory( ${OUT-DIR} OutDir.out)
    message("Add OUT-DIR OK" )
else()
    message(FATAL_ERROR   "INVALID FOLDER 'OUT-DIR'=${OUT-DIR}" )
endif()

发表评论

电子邮件地址不会被公开。 必填项已用*标注