ubuntu@ubuntu:$ vim TutorialConfig.h.in
ubuntu@ubuntu:$ cat TutorialConfig.h.in
// the configured options and settings for Tutorial
// TODO : Define Tutorial_VERSION_MAJOR and Tutorial_VERSION_MINOR
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
ubuntu@ubuntu:$
Cxx file
ubuntu@ubuntu:$ vim tutorial.cxx
ubuntu@ubuntu:$ cat tutorial.cxx
// A simple program that computes the square root of a number#include<cmath>#include<iostream>#include<string>#include"TutorialConfig.h"intmain(int argc,char* argv[]){if(argc <2){//report version
std::cout << argv[0]<<" Version "<< Tutorial_VERSION_MAJOR <<"."<< Tutorial_VERSION_MINOR << std::endl;
std::cout <<"Usage: "<< argv[0]<<" number"<< std::endl;return1;}// convert input to double// std::stod是C++ 11标准函数constdouble inputValue = std::stod(argv[1]);// calculate square rootconstdouble outputValue =sqrt(inputValue);
std::cout <<"The square root of "<< inputValue <<" is "<< outputValue
<< std::endl;return0;}
ubuntu@ubuntu:$
CMake file
ubuntu@ubuntu:$ vim CMakeLists.txt
ubuntu@ubuntu:$ cat CMakeLists.txt
# TODO : Set the minimum required version of CMake to be 3.10
cmake_minimum_required(VERSION 3.10)
# TODO : Create a project named Tutorial and project version number 1.0
project(Tutorial VERSION 1.0)
# TODO : Set the variable CMAKE_CXX_STANDARD to 11
# and the variable CMAKE_CXX_REQUIRED_STANDARD to True
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# TODO : Use configure_file to configure and copy TutorialConfig.h.in to
# TutorialConfig.h
configure_file(TutorialConfig.h.in TutorialConfig.h)
# TODO : Add an executable called Tutorial to the project
# Hint: Be sure to specify the source file as tutorial.cxx
add_executable(Tutorial tutorial.cxx)
# TODO : Use target_include_directories to include ${PROJECT_BINARY_DIR}
target_include_directories(Tutorial PUBLIC
${PROJECT_BINARY_DIR}
)
ubuntu@ubuntu:$
构建cmake工程
ubuntu@ubuntu:$ ls -tlr
-rw-r--r-- 1 ubuntu ubuntu 234 Oct 1718:17 TutorialConfig.h.in
-rw-r--r-- 1 ubuntu ubuntu 1014 Oct 1718:30 tutorial.cxx
-rw-r--r-- 1 ubuntu ubuntu 937 Oct 1718:34 CMakeLists.txt
ubuntu@ubuntu:$ mkdir exercise3_build
ubuntu@ubuntu:$ cd exercise3_build/
ubuntu@ubuntu:$ cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: /home/ubuntu/study/cmake-learning/cmake-3.25.0-rc1-tutorial-source/Step1/exercise3_build
ubuntu@ubuntu:$ cmake --build .
ubuntu@ubuntu:$ ls -tlr
total 52
-rw-r--r-- 1 ubuntu ubuntu 188 Oct 1718:34 TutorialConfig.h
-rw-rw-r-- 1 ubuntu ubuntu 14669 Oct 1718:34 CMakeCache.txt
-rw-rw-r-- 1 ubuntu ubuntu 5549 Oct 1718:34 Makefile
-rw-rw-r-- 1 ubuntu ubuntu 1730 Oct 1718:34 cmake_install.cmake
-rwxrwxr-x 1 ubuntu ubuntu 14872 Oct 1718:34 Tutorial
drwxrwxr-x 6 ubuntu ubuntu 4096 Oct 1718:34 CMakeFiles
ubuntu@ubuntu:$ cat TutorialConfig.h
// the configured options and settings for Tutorial
// TODO : Define Tutorial_VERSION_MAJOR and Tutorial_VERSION_MINOR
#define Tutorial_VERSION_MAJOR 1#define Tutorial_VERSION_MINOR 0
ubuntu@ubuntu:$
运行可执行文件
ubuntu@ubuntu:$ ./Tutorial 4294967296
The square root of 4.29497e+09 is 65536
ubuntu@ubuntu:$ ./Tutorial 10
The square root of 10 is 3.16228
ubuntu@ubuntu:$ ./Tutorial
./Tutorial Version 1.0
Usage: ./Tutorial number
ubuntu@ubuntu:$