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