This commit is contained in:
Andrei Astafev 2019-08-29 17:34:57 +03:00
parent 1068f502bb
commit 1aaacb1df7

View File

@ -163,7 +163,7 @@ make
файлами и перечни библиотек, необходимых для компоновки. Сначала файлами и перечни библиотек, необходимых для компоновки. Сначала
производится наличие модуля `PkgConfig`, в котором определена функция производится наличие модуля `PkgConfig`, в котором определена функция
`pkg_check_modules`, которая и осуществляет поиск. Например, для поиска `pkg_check_modules`, которая и осуществляет поиск. Например, для поиска
библиотек `gsl`, `fftw3` и `udev` можно написать: библиотек `gsl`, `fftw3` и `udev` можно написать в файле `CMakeLists.txt`:
[source,cmake] [source,cmake]
---- ----
@ -202,7 +202,7 @@ find_library(MATHGLQT5 mgl-qt5 PATHS /usr/lib /usr/lib/x86_64-linux-gnu)
На этапе конфигурирования проекта можно создать файл, в который будут На этапе конфигурирования проекта можно создать файл, в который будут
записаны параметры, полученные на данной стадии. В библиотеке CMLib записаны параметры, полученные на данной стадии. В библиотеке CMLib
присутствует функция `cmlib_config_hpp_generate()`, создающая файл присутствует функция `cmlib_config_hpp_generate()`, создающая файл
`${CMAKE_BUILD_DIR}/include/config.hpp`, в который записывается `${CMAKE_BUILD_DIR}/include/cmlib_config.hpp`, в который записывается
информация о имени и версии проекта, дате и типе сборки. информация о имени и версии проекта, дате и типе сборки.
[source,cmake] [source,cmake]
@ -277,7 +277,7 @@ install(TARGETS ${current_target}_static ARCHIVE DESTINATION ${CMAKE_INSTALL_LIB
if(BUILD_SHARED_LIBS) if(BUILD_SHARED_LIBS)
install(TARGETS ${current_target}_shared LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(TARGETS ${current_target}_shared LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif() endif()
install(FILES ${CMAKE_BINARY_DIR}/include/config.hpp ${current_target_headers} install(FILES ${CMAKE_BINARY_DIR}/include/cmlib_config.hpp ${current_target_headers}
COMPONENT headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${current_target}) COMPONENT headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${current_target})
---- ----
@ -296,7 +296,7 @@ add_subdirectory(src/cmex)
[source,cpp] [source,cpp]
---- ----
#include "compiler_features.hpp" #include "compiler_features.hpp"
#include "config.hpp" #include "cmlib_config.hpp"
#include <iostream> #include <iostream>
@ -304,8 +304,8 @@ add_subdirectory(src/cmex)
int main(int argc, char **argv) { int main(int argc, char **argv) {
std::cout << CMEX_COMPILER_VERSION_MAJOR << std::endl; // Значение из compiler_features.hpp std::cout << CMEX_COMPILER_VERSION_MAJOR << std::endl; // Значение из compiler_features.hpp
std::cout << BUILD_TYPE << std::endl; // Значение из config.hpp std::cout << BUILD_TYPE << std::endl; // Значение из cmlib_config.hpp
std::cout << CMEX_VERSION_STR << std::endl; // Значение из config.hpp std::cout << CMEX_VERSION_STR << std::endl; // Значение из cmlib_config.hpp
std::cout << cmex_init(4) << std::endl; // Функция из внутренней библиотеки std::cout << cmex_init(4) << std::endl; // Функция из внутренней библиотеки
return 0; return 0;
} }
@ -354,7 +354,7 @@ install(TARGETS ${current_target} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
== Подключение внешнего проекта == Подключение внешнего проекта
В каталоге `cmex/thirdparty` нужно создать каталог `cmext` с проектом, В каталоге `cmex/thirdparty` нужно создать каталог `cmext` с проектом,
состоящим из файлов `cmext.hpp`: состоящим из файла `cmext.hpp`:
[source,c] [source,c]
---- ----
@ -368,7 +368,7 @@ int32_t cmext_init(int32_t i);
#endif #endif
---- ----
`cmext.cpp`: файла `cmext.cpp`:
[source,c] [source,c]
---- ----
@ -379,7 +379,7 @@ int32_t cmext_init(int32_t i = 0) {
} }
---- ----
и `CMakeLists.txt`: и файла `CMakeLists.txt`:
[source,cmake] [source,cmake]
---- ----
@ -445,7 +445,7 @@ target_link_libraries(${current_target} ${CMAKE_BINARY_DIR}/lib/libcmext.a)
[source,cpp] [source,cpp]
---- ----
#include "compiler_features.hpp" #include "compiler_features.hpp"
#include "config.hpp" #include "cmlib_config.hpp"
#include <iostream> #include <iostream>
#include <cmext/cmext.hpp> #include <cmext/cmext.hpp>
@ -461,9 +461,9 @@ QTextStream& qStdOut()
int main(int argc, char **argv) { int main(int argc, char **argv) {
// Значение из compiler_features.hpp // Значение из compiler_features.hpp
qStdOut() << QObject::tr("Compiler version: ") << CMEX_COMPILER_VERSION_MAJOR << endl; qStdOut() << QObject::tr("Compiler version: ") << CMEX_COMPILER_VERSION_MAJOR << endl;
// Значение из config.hpp // Значение из cmlib_config.hpp
qStdOut() << QObject::tr("Project version: ") << CMEX_VERSION_STR << endl; qStdOut() << QObject::tr("Project version: ") << CMEX_VERSION_STR << endl;
// Значение из config.hpp // Значение из cmlib_config.hpp
qStdOut() << QObject::tr("Build type: ") << BUILD_TYPE << endl; qStdOut() << QObject::tr("Build type: ") << BUILD_TYPE << endl;
// Функция из внутренней библиотеки // Функция из внутренней библиотеки
qStdOut() << QObject::tr("libcmex function call: ") << cmex_init(4) << endl; qStdOut() << QObject::tr("libcmex function call: ") << cmex_init(4) << endl;
@ -476,8 +476,8 @@ int main(int argc, char **argv) {
== Qt5 == Qt5
Для поиска необходимых компонентов Qt5 нужно в файл Для поиска необходимых компонентов Qt5 нужно в файл `cmex/CMakeLists.txt`
`cmex/CMakeLists.txt` добавить строки: перед вызовом функции `cmlib_config_hpp_generate()` нужно добавить строку:
[source,cmake] [source,cmake]
---- ----
@ -509,7 +509,7 @@ target_link_libraries(${current_target} Qt5::Core)
[source,cpp] [source,cpp]
---- ----
#include "compiler_features.hpp" #include "compiler_features.hpp"
#include "config.hpp" #include "cmlib_config.hpp"
#include <QtCore> #include <QtCore>
#include <iostream> #include <iostream>
@ -533,9 +533,9 @@ int main(int argc, char **argv) {
} }
// Значение из compiler_features.hpp // Значение из compiler_features.hpp
qStdOut() << QObject::tr("Compiler version: ") << CMEX_COMPILER_VERSION_MAJOR << endl; qStdOut() << QObject::tr("Compiler version: ") << CMEX_COMPILER_VERSION_MAJOR << endl;
// Значение из config.hpp // Значение из cmlib_config.hpp
qStdOut() << QObject::tr("Project version: ") << CMEX_VERSION_STR << endl; qStdOut() << QObject::tr("Project version: ") << CMEX_VERSION_STR << endl;
// Значение из config.hpp // Значение из cmlib_config.hpp
qStdOut() << QObject::tr("Build type: ") << BUILD_TYPE << endl; qStdOut() << QObject::tr("Build type: ") << BUILD_TYPE << endl;
// Функция из внутренней библиотеки // Функция из внутренней библиотеки
qStdOut() << QObject::tr("libcmex function call: ") << cmex_init(4) << endl; qStdOut() << QObject::tr("libcmex function call: ") << cmex_init(4) << endl;
@ -632,7 +632,7 @@ MyMainWindow::~MyMainWindow() {
[source,cpp] [source,cpp]
---- ----
#include "compiler_features.hpp" #include "compiler_features.hpp"
#include "config.hpp" #include "cmlib_config.hpp"
#include <QtCore> #include <QtCore>
#include <QtWidgets> #include <QtWidgets>
@ -659,9 +659,9 @@ int main(int argc, char **argv) {
// Значение из compiler_features.hpp // Значение из compiler_features.hpp
qStdOut() << QObject::tr("Compiler version: ") << CMEX_COMPILER_VERSION_MAJOR << endl; qStdOut() << QObject::tr("Compiler version: ") << CMEX_COMPILER_VERSION_MAJOR << endl;
// Значение из config.hpp // Значение из cmlib_config.hpp
qStdOut() << QObject::tr("Project version: ") << CMEX_VERSION_STR << endl; qStdOut() << QObject::tr("Project version: ") << CMEX_VERSION_STR << endl;
// Значение из config.hpp // Значение из cmlib_config.hpp
qStdOut() << QObject::tr("Build type: ") << BUILD_TYPE << endl; qStdOut() << QObject::tr("Build type: ") << BUILD_TYPE << endl;
// Функция из внутренней библиотеки // Функция из внутренней библиотеки
qStdOut() << QObject::tr("libcmex function call: ") << cmex_init(4) << endl; qStdOut() << QObject::tr("libcmex function call: ") << cmex_init(4) << endl;