cmake引入編譯選項宏


最終實現了。方案如下。

  • 設置兩個config.h.in,即此時有兩份config.h
  • 注意,生成文件夾是build目錄下,因為config.h的生成是檢測到已有就不修改
option(SUB_HEART "Sub client program heart" on)
configure_file (
    "${PROJECT_SOURCE_DIR}/config_heart.h.in"
    "${PROJECT_BINARY_DIR}/spade-heart/config.h"
)


option(SUB_DIAMOND "Sub client program diamond" on)
configure_file (
    "${PROJECT_SOURCE_DIR}/config_diamond.h.in"
    "${PROJECT_BINARY_DIR}/spade-diamond/config.h"
)
  • 使用target_include_directories,即不同的目標包含不同的config.h
target_include_directories(spade_diamond PRIVATE "${PROJECT_BINARY_DIR}/spade-diamond")

target_include_directories(spade_heart PRIVATE "${PROJECT_BINARY_DIR}/spade-heart")

 

------

經添加的不能刪除

-----------------

放棄

同一個源碼,編譯兩次使用不同的宏設置,發現已有config.h文件后不會去修改,即cmake前要把上次cmake的文件均刪除,而且同一次cmake里生成后不會修改

如果是不同源碼,每個源碼的頭文件相同

那么我同一個源碼,設置宏,不修改config.h,但是修改引入的庫,可以實現

分支不在config,而是庫

此時config沒什么實際意義

繼續

------

cmake執行shell命令

https://www.cnblogs.com/jackyim/p/3770508.html

未驗證

https://blog.csdn.net/qq_28584889/article/details/97758450

----------

message(${PROJECT_BINARY_DIR})
message(${PROJECT_SOURCE_DIR})

 

BINARY是執行cmake的目錄,即build

SOURCE是CMakeLists.txt所在的目錄

---------------------------

  • CMakeLists.txt添加
option(SUB_HEART "Sub client program heart" on)
    
option(SUB_DIAMOND "Sub client program diamond" on)

configure_file (
    "${PROJECT_SOURCE_DIR}/config.h.in"
    "${PROJECT_BINARY_DIR}/config.h"
)

跟在project后

config.h是由config.h.in生成的

  • config.h.in內容
#cmakedefine SUB_HEART
#cmakedefine SUB_DIAMOND

即兩個宏均開啟

 

--------------------------------

[場景]

當前有四個程序

club 服務器端

spade 客戶端

diamond 客戶端子程序

heart 客戶端子程序

 

也就是說1個服務器,兩個客戶端

在編譯的時候,編譯兩個spade,根據編譯選項,一個spade調用diamond程序,另一個spade調用heart程序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM