繁体   English   中英

指定cmake如何创建visual studio项目

[英]Specify how cmake creates visual studio project

我正在为我的项目设置cmake,我已经为它设置了一个测试项目。 当它生成我的visual studio 2010项目时,我想把它作为我之前的项目。

  • 它创建了一个我不想要的ALL_BUILD和ZERO_CHECK项目。
  • 它将.h文件放入External Dependencies文件夹中。 我想要一个包含所有.h文件的Include Files文件夹。
  • 我还想在不同的过滤器下对一些文件进行分组。 就像在我的核心库中一样,我想将一个文件夹中与Maths相关的所有文件和另一个与Event管理相关的所有文件组合在一起。
  • 在文件系统上,它将项目文件放在/ Lib / src中。 可能是因为我在代码文件夹中组织了它,但我不希望它用于项目文件。
  • 我想设置不同的配置,所以我有DebugOpenGL,DebugDirectX,ReleaseOpenGL,ReleaseDirectX,然后为两种类型的配置设置标志USE_OPENGL或USE_DIRECTX。

当我在windows上构建时,如何在构建Linux时排除某些文件? 就像我有WindowWin.cpp和WindowLinux.cpp一样。


我已经尝试了你的吸气但不能让它起作用:

#LibProject/src

FILE(GLOB test0_headers $CMakeTest_SOURCE_DIR/LibProject/inc/test.h)
source_group(include0 FILES ${test0_headers})
FILE(GLOB test0_source ${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp)
source_group(source0 FILES ${test0_source})

FILE(GLOB test1_headers $CMakeTest_SOURCE_DIR/LibProject/inc/test1.h)
source_group(include1 FILES ${test1_headers})
FILE(GLOB test1_source ${CMakeTest_SOURCE_DIR}/LibProject/src/test1.cpp)
source_group(source1 FILES ${test1_source})

include_directories(${test0_headers} ${test1_headers})

add_library(LibProject  ${test0_headers} ${test1_headers} ${test0_source} ${test
1_source})

我现在有点工作..只是我想要源组中的头文件和源文件的子文件夹。

set(test_source0 ${CMakeTest_SOURCE_DIR}/LibProject/inc/test.h ${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp)
source_group(TEST FILES ${test_source0})

set(test_source1 ${CMakeTest_SOURCE_DIR}/LibProject/inc/test2.h ${CMakeTest_SOURCE_DIR}/LibProject/src/test2.cpp)
source_group(TEST2 FILES ${test_source1})

include_directories(${CMakeTest_SOURCE_DIR}/LibProject/inc)
add_library(LibProject  ${test_source0} ${test_source1})

继承人我的解决方案:)

set(test_header
${CMakeTest_SOURCE_DIR}/LibProject/inc/test.h)
set(test_source
${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp)

source_group(TEST\\Headers FILES ${test_header})
source_group(TEST\\Source FILES ${test_source})

set(test2_header
${CMakeTest_SOURCE_DIR}/LibProject/inc/test2.h)
set(test2_source
${CMakeTest_SOURCE_DIR}/LibProject/src/test2.cpp)
source_group(TEST2\\Headers FILES ${test2_header})
source_group(TEST2\\Source FILES ${test2_source})

include_directories(${CMakeTest_SOURCE_DIR}/LibProject/inc)

add_library(LibProject
${test_header}
${test_source}
${test2_header}
${test2_source})

要将文件分组到Visual Studio中的文件夹,您可以使用:

# Include files
FILE(GLOB all_headers "include/*.h*")
source_group("include" FILES ${all_headers})

# Source files
FILE(GLOB all_srcs "src/*.cpp")
source_group("source" FILES ${all_srcs})

这将使包含在include文件夹中的所有.h文件显示在Visual Studio中名为include的文件夹中。 您的cpp文件也是如此。 您可以使用此技术在CMake中创建自己的结构,如果这是您想要的。

出于ALL_BUILD和ZERO_CHECK的目的,请阅读此答案 要禁用ZERO_CHECK的生成,请使用set(CMAKE_SUPPRESS_REGENERATION true)

要在OpenGL和DirectX之间进行选择并设置相应的文件夹,您可以使用上面使用的相同技术,但将它们放在一个

if(${USE_OPENGL})
    FILE(GLOB ....)
endif()

我想你应该已经明白了。

我会回答我所知道的:

ALL_BUILD和ZERO_CHECK用于使您的项目与CMakeFiles的更改保持同步。 我认为没有办法摆脱这些。

要将.h文件放在您想要的位置,您需要将它们作为源的一部分包含在内。 我使用这样的东西:

file(GLOB LocalProjectIncludes "${yourheaderdirectory}/*.h")

然后我将$ {LocalProjectIncludes}附加到项目的源文件中。 CMake会发现它们是标题; 它不会试图建立它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM