CMakeLists.txt的简单使用

  • Makefile和CMakeLists的关系

环境准备:需要安装gcc,g++,make

sudo apt-get install gcc g++
sudo apt-get isntall make
  • 1.首先在test文件夹下新建如下内容

  • 2.hello.c文件的内容如下
#include"stdio.h"
void main(void)
{
    printf("hello world\r\n");
    while(1);
}
  • 3.cmakeLists的内容如下
PROJECT(test)                           #工程名
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)     #需要的最低版本
#AUX_SOURCE_DIRECTORY(. DIR_SRCS)        #AUX_SOURCE_DIRECTORY(<dir> <variables>)  将dir目录下源文件名赋值给variables变量
ADD_EXECUTABLE(main hello.c)        #编译hello.c,生成一个main的可执行文件 
  • 4.然后在build文件夹下cmake ..  和 make 最后执行 ./main 

  • 一些常见的cmakelists的文件参数写法
  1. 使用include_directories()                                                           #包含头文件目录
  2. set(SOURCES src/mainapp.cpp src/Student.cpp)                    #设置SOURECE变量 ==  src/mainapp.cpp  src/Student.cpp
  3. add_library(testStudent SHARED ${SOURCES})                     #根据SOURCES变量所含的C文件来生成库文件testStudent,最后名为libtestStudent.so ,这句话也带有编译的功能
  4. add_library(testStudent STATIC ${SOURCES})                        #根据SOURCES变量所含的C文件来生成库文件testStudent,最后名为libtestStudent.a ,这句话也带有编译的功能
  5. install(TARGETS testStudent DESTINATION /usr/lib)               #当执行make install 将会把生成的库文件testStudent放到/usr/lib文件夹下
  6. add_executable(hello helloworld.cpp)                                        #将源文件helloworld.cpp生成可执行文件hello
  7. MESSAGE("${CMAKE_CURRENT_SOURCE_DIR}")              #打印CMakeLists.txt文件所在路径 ---打印变量 CMAKE_CURRENT_SOURCE_DIR 
  8. add_executable(TestAdd main.cpp lib/add.cpp include/add.h)  #编译main.cpp,需要调用add.cpp和add.h的函数,从而生成可执行文件 TestAdd
  9. if ("$ENV{QNX_HOST}" STREQUAL " test_str")                       #如果两个字符串"$ENV{QNX_HOST}" 和 " test_str"相等返回TRUE     
  10. set( ENV{PATH} /home/martink )                                               #设置环境变量PATH值为 /home/martink
  11. link_directories(

    /*库文件路径*/

    )

  12. set ( PROJECT_LINK_LIBS libtestStudent.so )

    #set ( PROJECT_LINK_LIBS libtestStudent.a )

    target_link_libraries(libtest ${PROJECT_LINK_LIBS} )   #生成的libtest需要链接库PROJECT_LINK_LIBS(包含libtestStudent.so)

  13. aux_source_directory

aux_source_directory(./test  CODE_SRC)

查找test目录下的所有文件,且命名为CODE_SRC。 使用: ${CODE_SRC}

  • 编译test.cpp生成testStudent.so

cmake_minimum_required(VERSION 3.10)

project (HELLO)

set(SOURCES test.cpp)
add_library(testStudent SHARED ${SOURCES}) 
  • #链接libtestStudent.so生成可执行文件main
     
cmake_minimum_required(VERSION 2.8.9)
 
#For the shared library:
set ( PROJECT_LINK_LIBS libtestStudent.so )  
link_directories( ~/Desktop/hello/build )  #.so文件路径

add_executable(main main.cpp)  #main.cpp编译生成可执行文件 main
target_link_libraries(main ${PROJECT_LINK_LIBS} )  #main需要链接libtestStudent.so
  •  编译生成可执行文件和so
cmake_minimum_required(VERSION 2.8.9)

link_directories(
     ~/Desktop/hello/build 
)                          #设置要链接的库的文件路径

include_directories(
    ~/Desktop/hello/Test  #test.h的位置
)

#编译Test.cpp生成 libTestStudent.so 
set(SOURCES_test Test/test.cpp)
add_library(testStudent SHARED ${SOURCES_test}) 

set ( PROJECT_LINK_LIBS libtestStudent.so )  #设置将要链接的库名

add_executable(main main.cpp)
target_link_libraries(main ${PROJECT_LINK_LIBS} )  #链接libtestStudent.so编译main.cpp生成可执行文件main。输入./main即可执行

set(SOURCES main.cpp)   
add_library(main_out SHARED ${SOURCES})   #编译main.cpp生成libmain_out.so

  1. #SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../bin)       #设置可执行文件的输出目录
  2. #SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../lib)           #设置库文件的输出目录
     
  • 编译生成libtest.a
list(APPEND GAME_SOURCE
        Classes/AppDelegate.cpp
        Classes/Hello.cpp
     )

list(APPEND GAME_SOURCE
        proj.qnx/main.cpp
     )


set(all_code_files
    ${GAME_HEADER}
    ${GAME_SOURCE}
    )

add_library(test STATIC ${all_code_files})
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值