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) 编辑 收藏 举报