我正在尝试将我的Visual Studio解决方案迁移到CMake。
我有两个项目 - generator(generator.exe从文本文件生成C ++源代码)和myProj(包含一些必须由generator.exe处理的文本文件)。
我想要的是:
那么,怎么做呢?
修改 我到目前为止所尝试的内容:
###################################################################
# 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
答案 0 :(得分:1)
从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与编译器合作,应该弄清楚源文件对它们包含的头文件的依赖性,并且它们比大多数人做得好得多。 C ++' s #include
已经告诉编译器处理标题!
其次,您显示的CMake代码不是您正在执行的代码。您的add_library()
列表SomeSource.h
,但CMake抱怨../include/SomeSource.h
。目录名称也无法解决。这使得很难说出究竟是什么问题。
在熟悉新工具时我的一般建议:不立即尝试让它在最终希望它在中工作的上下文中跳舞(myProj,in这个案例)。相反,设置一个简单的测试环境(目录X和Y,源文件foo.cpp和bar.cpp,你明白了),并测试概念(比如,{{1}创建一个文件而不是echo
,因此您不需要先构建generator
- next 步骤。)
这样,如果弹出任何问题,您可以在摘要中寻求帮助,并且您可以提供完整的示例代码供其他人查明,而不必摆弄你的项目设置。
此外,您还可以避免错误的先入为主所带来的问题。很多时候,你的第一次尝试会导致尴尬的设置,真正的优雅只会来自所吸取的教训。花时间正确学习该工具。
如果您还没有了解它,source_group()
允许CMake创建一个MSVC项目文件,并将给定的源文件组合在一起,这样您就可以让您的项目处于CMake控制之下,但仍可在内部轻松工作MSVC。
我已经建立了一个"框架" CMake设置我在各种项目中工作,也许您对它感兴趣(灵感或实际使用):JAWS。