сделать Cmake входы и выходы

Теоретически, любой из C ++ программа может использовать г ++ для компиляции.

Как мы все знаем, программа письма примерно следующим образом:

1, писать редактор исходного кода, такие как .c файл.

2, конечный файл компилятор генерирует скомпилированный код, например, .o.

3, связан с исполняемым файлом объектного кода, генерируемого с помощью линкера, такого как EXE-файл.

Makefile

Но если исходный файл тоже будет особенно неприятна, когда компилятор, чтобы люди думали, почему бы не разработать программу, аналогичную партии к партии компилировать исходный файл его?

Так что будет делать инструменты, который является автоматизированными инструментами сборки , вы можете использовать одну команду для достижения полной компиляции.

Но вы должны написать файл правил, сделать пакетную базу для того , чтобы скомпилировать этот файл Makefile , поэтому писать Makefile является одним из важнейших навыков для программиста.

 

Unix, сделать тройной

Процесс разработки Unix, регулярные операции установить соответствующий файл библиотеки скомпилированные из исходного кода, поэтому следующие три команды является обычным явлением, широко известный как тройная:

./configure

делать

сделать установку

Давайте посмотрим на эти три шага сделаны.

конфигурировать

Выполнить ./configure файл, как правило, некоторая подготовка перед официальной среде компиляции, готов собрать необходимые зависимости и так далее. Например, текущая платформа системы обнаружения, компилятор должен обнаружить существование как вызов, настроить и создать соответствующий скомпилировать необходимые документы.

делать

После того, как подготовительные работы завершены правильно, можно делать вызовы для выполнения сборки. Фактическое выполнение задачи является компиляция Makefile, чтобы определить проект из источника.

Когда дело обычно загружаются из пакета дегтя не может содержать формальный файл Makefile, но еще временные файлы представлены в виде, например, Makefile.in, Makefile.am, Makefile.MSVC и т.д., а затем выполняются в соответствии с соответствующим ./configure среда для создания окончательного файла Makefile требуется.

сделать установку

Когда проект компилируется нормально, он будет генерировать соответствующий вывод, исполняемый файл, поэтому файл или DLL, или динамический шорткатов файлов. Последний шаг, чтобы скопировать сгенерированные файлы в соответствующий каталог системы, этот процесс установки.

Например, чтобы скопировать исполняемый файл в системный PATH может иметь место, чтобы помочь скопировать документ MANPATH, копировать другие файлы в соответствующий каталог.

 

CMakelist.txt

Для большого проекта, написать Makefile это сложная вещь, чтобы люди думали, почему бы не создать инструмент, после прочтения всех исходных файлов, автоматически генерировать Makefile это?

Так что это был инструмент CMake, который может выводить различные Makefile или файл проекта, помогая тем самым уменьшить нагрузку на программиста.

Однако последующее запись является cmakelist файл, который CMake основан на правилах. Так что нет короткого пути в мире программирования, по-прежнему вниз на землю.

 

 Базовая структура CMakeList.txt 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
#声明要求的cmake最低版本
cmake_minimun_required(VERSION 2.8)
#声明一个cmake工程,工程名为post_fusion
project(post_fusion)
# 添加c++ 11标准支持
set( CMAKE_CXX_FLAGS "-std=c++11" )
如果程序中使用了C++11标准,则需要设置告诉编译器,没有可以不用写。
#设置编译器编译模式:
set( CMAKE_BUILD_TYPE "Debug" )
对于编译用的Debug模式和调试用的Release模式,在Debug模式中,程序运行较慢,当可以在IDE中进行断点调试,而Release模式则速度较快,但没有调试信息。不设置默认是Debug模式。
# 添加引用的第三方头文件,例如添加Eigen头文件
include_directories( "/usr/include/eigen3" )
#编译生成库文件
add_library(irfusion comfunc.c post_sins_gnss.cpp)
#这条命令告诉cmake,我们想把这些源文件编译成一个叫作“irfusion”的库。在linux中,库文件分为静态库和动态库两种,静态库以.a作为后缀名,共享库以.so结尾。
#所有库都是一些函数打包后的集合,差别在于静态库每次被调用都会生成一个副本,而共享库则只有一个副本,更省空间。如果想生成共享库而不是静态库,只需要使用以下语句即可
add_library(irfusion_shared SHARED  comfunc.c post_sins_gnss.cpp)此时得到的文件就是irfusion_shared.so了。
#然后,在CMakeList.txt中添加一个可执行程序的生成命令,链接到刚才使用的库上:
add_executable(irfusion main.cpp)
target_link_libraries(irfusion irfusion_shared)

рекомендация

отwww.cnblogs.com/MakeView660/p/11363334.html