导航

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程序

posted on 2021-05-10 14:15  toughcactus  阅读(1374)  评论(0编辑  收藏  举报