1. 程式人生 > >CMake2:版本號配置與標頭檔案生成

CMake2:版本號配置與標頭檔案生成

1.基本測試 

最基本的功能就是利用原始碼檔案生成一個可執行程式。 CMakeLists.txt:
cmake_minimum_required ( VERSION 3.5)
project (Tutorial)
add_executable(Tutorial tutorial.c)
Tutorial.c:
// A simple program that computes the square root of a number
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main (int argc, char *argv[])
{
  double inputValue = 4;
  double outputValue = sqrt(inputValue);
  fprintf(stdout,"The square root of %g is %g\n",
          inputValue, outputValue);
  return 0;
}
利用CMake組建,VisualStudio編譯就可以生成可執行檔案Tutorial.exe。 這裡會出現一個問題就是Tutorial.exe點選後出現閃退,採用一下方法可以解決。
  • exe目錄下新建一個文字文件:新建文件.txt;
  • 開啟文件,鍵入內容:Tutorial.exe (換行) pause  注意XX.exe,XX是你的實際應用程式名;
  • 儲存文件,名字+字尾改為:Tutorial.bat;
  • 點選Tutorial.bat檔案即可解決閃退問題。

2.增加版本號並配置標頭檔案

首先討論的是給我們的專案/可執行程式新增一個版本號。當然我們可以在原始碼中設定,但是在CMake中設定版本號會更加靈活。
首先我們要修改CMakeLists.txt如下:
cmake_minimum_required (VERSION 3.5)
project (Tutorial)
# The version number.
set (Tutorial_VERSION_MAJOR 1)
set (Tutorial_VERSION_MINOR 0)
 
# configure a header file to pass some of the CMake settings
# to the source code
configure_file (
  "${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"
  "${PROJECT_BINARY_DIR}/TutorialConfig.h"
  )
 
# add the binary tree to the search path for include files
# so that we will find TutorialConfig.h
include_directories("${PROJECT_BINARY_DIR}")
 
# add the executable
add_executable(Tutorial tutorial.c)
因為配置檔案將要被寫入到二進位制檔案結構中,所以我們必須要把該檔案新增到相應的路徑列表中。首先,我們在源路徑下建立TutorialConfig.h.in,如下:
// the configured options and settings for Tutorial
#define Tutorial_VERSION_MAJOR @[email protected]
#define Tutorial_VERSION_MINOR @[email protected]
!!該檔案是在幫助我們利用CMake生成相應的TutorialConfig.h檔案!! 當CMake配置標頭檔案的時候, @[email protected] 和 @[email protected] 的值就會被 CMakeLists.txt 檔案中得值所取代。 下面修改原檔案Tutorial.c,使其包括配置的標頭檔案並使用版本號,原始碼修改如下:
// A simple program that computes the square root of a number
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "TutorialConfig.h"
 
int main (int argc, char *argv[])
{
  double inputValue = 4;
  double outputValue = sqrt(inputValue);
  fprintf(stdout,"The square root of %g is %g\n",
          inputValue, outputValue);
  fprintf(stdout,"%s Version %d.%d\n",
          argv[0],
          Tutorial_VERSION_MAJOR,
          Tutorial_VERSION_MINOR);
  return 0;
}
輸出結果:

相關推薦

CMake2:版本配置檔案生成

1.基本測試  最基本的功能就是利用原始碼檔案生成一個可執行程式。 CMakeLists.txt: cmake_minimum_required ( VERSION 3.5) project (T

VS2017配置使用檔案pthread.h

POSIX執行緒(POSIX threads),簡稱Pthreads,是執行緒的POSIX標準。該標準定義了建立和操縱執行緒的一整套API。在類Un

noip的c++檔案操作檔案

看一些人寫這些真的心累 首先標頭檔案。 #include <bits/stdc++.h> using namespace std; 可以用!相信我,親測,說不能用的都不是好老師!其他都不要加,這一條包含了一切。 然後是檔案操作。 freopen(“題

extern檔案(*.h)的區別和聯絡

個人認為有一些道理:所以轉過來學習了。 用#include可以包含其他標頭檔案中變數、函式的宣告,為什麼還要extern關鍵字?         如果我想引用一個全域性變數或函式a,我只要直接在原始檔中包含#include<xxx.h> (xxx.h包含

NSIS文字及字串函式檔案介紹

轉自 http://hi.csdn.net/jinglidong 文字函式,顧名思義就是處理字串的函式。使用這些字串函式前,必須先包含標頭檔案WordFunc.nsh。該標頭檔案目前包含如下一些函式:WordFind、WordFind2X、WordFind3X、WordRe

extern 用法,全域性變數檔案

用#include可以包含其他標頭檔案中變數、函式的宣告,為什麼還要extern關鍵字,如果我想引用一個全域性變數或 函式a,我只要直接在原始檔中包含#include<xxx.h> (xxx.h包含了a的宣告)不就可以了麼,為什麼還要用exter

C語言 makefile檔案檔案的寫法。

makefile 檔案的書寫。 總結下make 執行過程       1)make 在當前目錄下找 "Makefile"或"makefile"的檔案     2)如果找到,則會找檔案中第一個目標檔案(target)。     3)如果 main 命令的執行,依賴後面命令執

java jni 檔案生成

jni標頭檔案生成 eclipse下 eclpse下,在java類程式碼中載入jni動態庫,定義好native函式後,在專案程式碼目錄的bin\classes下,cmd輸入命令:javah -jni 類名如 >javah -jni com.skyw

cpp檔案配置

如果使用debug工具 請使用c++11標準 並確保string標頭檔案內實現了to_string()方法 如果使用Mingw的g++編譯 請按照說明替換部分檔案 下載地址 /**************************** * @Author DDulla

ICTCLAS2016 linux C++版本 使用教程 Eclipse下開發C/C++程式之檔案,庫檔案引用

歡迎使用NLPIR/ICTCLAS2014分詞系統 NLPIR分詞系統前身為2000年釋出的ICTCLAS詞法分析系統,從2009年開始,為了和以前工作進行大的區隔,並推廣NLPIR自然語言處理與資訊檢索共享平臺,調整命名為NLPIR分詞系統。張華平博士先後傾力打造十餘

String檔案CString檔案

首先說string的標頭檔案 1、<string> 包裝了std的C++標頭檔案 2、<string.h> 舊的C標頭檔案 3、<cstring.h> 舊C標頭檔案的std版本,切記,這不是cstring的標頭檔案 詳見effective c++ 的第49條 再說cstr

MFCOpenCV使用中的CVVImage檔案

在使用MFC顯示OpenCV的影象時經常要用到CvvImage類,而這個類又不包括在OpenCV標頭檔案中,為了方便大家以後的使用中有用到CvvImage這個類,本文附上這個類的程式碼。 首先是CvvImage.h #pragma once //CvvImage.h #i

gsoap+URL自動生成檔案客戶端程式碼流程

1、下載gsoap程式碼下載連結     下載以後解壓,進入\gsoap-2.8\gsoap-2.8\gsoap\bin\win32這個目錄下面有兩個執行檔案soapcpp2.exe 與wsdl2h.exe     wsdl2h.exe這個是生成標頭檔案的     so

DDullahan cpp檔案配置

/**************************** * @Author DDullahan * * @Date 2018/10/22 * * @Version 緣分更新 *

Qt Creator 配置第三方庫和檔案

引入第三方庫 opencv 首先安裝opencv,前面部落格opencv已經介紹如何安裝了 D:\opencv\build\x64\vc14\lib\opencv_world310.lib    動態庫(存放動態連結庫的地址) D:\opencv\build\include

c語言編譯過程和檔案<>""的區別

編譯過程:   預處理--編譯--彙編--連結 預處理:用於將所有#include標頭檔案及#define等巨集定義替換成真正的內容,預處理後的得到的仍然是文字檔案,但體積會大很多。 編譯:將預處理之後的程式轉換成特定彙編程式碼的過程

c++模板類的成員函式的宣告定義應該放在檔案

    今天嘗試自己實現vector資料結構底層,在定義vector模板類的時候,還想像往常一樣把類分為.h檔案和.cpp檔案,把成員函式的宣告放在.h檔案中,把具體實現放在.cpp檔案中,結果在測試時發現在編譯過程中報錯。除錯了很久,重視提示“無法解析的外部符號”,如圖所示

C++ 基礎(五)使用vs2015封裝c++生成.dll檔案、.lib檔案、.h檔案後,給另一個工程使用:使用前,需配置檔案(.h)靜態庫(.lib)和 動態庫(.dll )專案屬性

一、簡介 我是一個認真的人,要麼不寫,要麼我就把步驟、截圖、程式碼,一 一 附上,方便大家參考學習。 1、為什麼要生成DLL和lib?      就是為了給VS工程呼叫(比如C#呼叫、C++工程)。 2、C#為什麼要呼叫DLL和lib? C++寫的程

C++ 基礎(三)C++檔案原始檔的使用方法 舉例

看完這篇文章,你就知道怎麼用標頭檔案和原始檔了 http://www.cnblogs.com/fenghuan/p/4794514.html 標頭檔案:常量、變數、函式、類的宣告 原始檔:變數的定義和函式的實現 步驟一、先建立標頭檔案 #ifndef CIRCLE_H #defi

Android學習筆記——NDK中C++標準庫、STL的配置;Include其他檔案

以下所有是基於Eclipse的,使用命令列的繞道。 1、STL的使用,以stlport為例官方的說法是隻需要在Application.mk檔案中新增如下一行即可 Application.mk程式碼   APP_STL := stlport_static   即可,可是