想用cmake调用shell引入一些环境变量,或者编译链。
查到了几种方法:
execute_process
https://cmake.org/cmake/help/v3.0/command/execute_process.html
exec_program
https://cmake.org/cmake/help/v3.0/command/exec_program.html#command:exec_program
add_custom_target
https://cmake.org/cmake/help/v3.0/command/add_custom_target.html
add_custom_command
https://cmake.org/cmake/help/v3.0/command/add_custom_command.html
但是无论如何,都在child process里面执行shell,No intermediate shell is used,没办法放弃了。
除非把所有shell用cmake写一遍,但是一旦shell更新,cmake也要更新,这就是给自己找麻烦了。
解决办法是外部留一个build.sh 在里面选平台也好,加选项也好,再用这个shell脚本调用cmake。
当然,python和bat也ok。
=================更新==============
还有种苟且的方法,使用file命令读编译链的文本。
file(STRINGS env.sh my_env_file)
然后用正则表达式手转一遍
if( $ENV{啥啥FLAGS} MATCHES ”啥啥“ )
set( 整一下 )
endif()
还有环境变量
set( CMAKE_CXX_FLAGS $ENV{CXXFLAGS} CACHE STRING "" FORCE )
其他参考:
https://blog.csdn.net/ztszph/article/details/80997953