CMake:在执行CMake脚本期间生成源
CMake: generate sources during CMake script execution
我正在尝试将Visual Studio解决方案迁移到CMake。
我有两个项目-generator(generator.exe从文本文件生成C++源)和myProj(包括一些必须由generator.exe处理的文本文件)。
我想要的是:
- 生成生成器项目
- 使用步骤1中的generator.exe从项目myProj中的文本文件生成C++源文件
- 将生成的源文件放入myProj的VS项目中
那么,如何做到这一点呢?
编辑到目前为止我尝试过的:
###################################################################
# in root/generator/CMakeLists.txt:
set(SRC_LIST .... )
set(HDR_LIST .... )
add_executable(generator ${SRC_LIST} ${HDR_LIST})
###################################################################
# in root/my_proj/CMakeLists.txt:
add_subdirectory(../generator/ ../generator/cmake_out)
add_subdirectory(src)
###################################################################
# in root/my_proj/src/CMakeLists.txt:
ADD_CUSTOM_COMMAND(
OUTPUT ../include/SomeSource.h SomeSource.cpp
COMMAND generator ../definitions/SomeDefs1.txt
DEPENDS generator ../definitions/SomeDefs1.txt
)
set(SRC_LIST SomeSource.cpp .... )
set(HDR_LIST SomeSource.h .... )
add_library(myProj STATIC ${SRC_LIST} ${HDR_LIST} )
###################################################################
###################################################################
CMake的输出:
.....
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler using: Visual Studio 12 2013
-- Check for working CXX compiler using: Visual Studio 12 2013 -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
CMake Error at src/CMakeLists.txt:145 (add_library):
Cannot find source file:
../include/SomeSource.h
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx
从CMake的add_custom_command()
开始,然后从那里开始:
add_executable( generator ${generator_SOURCES} )
add_custom_command( OUTPUT source1.cpp source2.cpp
COMMAND generator args1 args2
COMMENT "Generating sources..." )
是否将myProj集成到您的其他项目中,或将其保持在外部,取决于您的个人需求,并影响最终设置的外观。
您显示的CMake代码不是您正在执行的代码。您的add_library()
列出了SomeSource.h
,但CMake抱怨../include/SomeSource.h
。目录名也不起作用。这使得很难说到底出了什么问题。
当你熟悉一个新工具时,我的一般建议是:不要立即尝试让它在你最终希望它在中工作的环境中跳舞(在这种情况下是myProj)。相反,设置一个简单的测试环境(使用目录X和Y,源文件foo.cpp和bar.cpp,你就知道了),并测试概念(比如,让echo
创建一个文件而不是generator
,这样你就不需要先构建generator
——这是下一步)。
这样,如果出现任何问题,您可以在摘要中请求的帮助,并且您可以提供完整的示例代码供其他人解决,而无需在项目设置中摇摆不定。
此外,你要避免由于错误的先入为主观念而产生的问题。很多时候,你的第一次尝试会导致一个尴尬的设置,而真正的优雅只是从经验教训中产生的。投入时间正确学习该工具。
如果你还不知道,source_group()
允许CMake创建一个MSVC项目文件,将给定的源文件分组在一起,这样你就可以在CMake的控制下控制你的项目,但仍然可以在MSVC中轻松工作。
我已经建立了一个";框架";我在各种项目中使用的CMake设置,也许你对它感兴趣(为了获得灵感或实际使用):JAWS。
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用CMake创建QML插件
- cmake如何在fedora工作站中找到boost静态库包
- FindPOCO CMAKE 脚本无法找到 MYSQL::client
- CMake 引用我在 ~/bin 中创建的随机 shell 脚本(即使我删除了它)?
- cmake 安装"noconfig"脚本有什么用?即。 "XXXTarget-noconfig.cmake"
- 为什么这个 CMake 脚本找到"alloca"但仍然失败?
- 在构建之前,如何使Cmake在构建之前运行Python脚本,以生成用于构建中的项目的文件
- 使用C++脚本自动执行 CMake 生成
- 如何在没有外部脚本的情况下链接CMake和SQLite
- OpenGL渲染不适用于Linux Machine(Windows Renders)---可能与CMAKE脚本有关(请参
- CMake、"IMPORTED"库和查找脚本
- 在 cmake 中创建一个宏脚本,并在源文件中调用该宏
- 在后续'make'运行中强制刷新 cmake 脚本
- 如何使用cmake脚本从命令行选择用于编译C++代码的xcode版本
- cmake:试图在cmake脚本执行期间调用msbuild
- CMake:在执行CMake脚本期间生成源
- 在cmake脚本中提供帮助信息