2011-03-05 83 views
3

想象一下以下情况:CMake的目标设置问题

我有“项目”的文件夹,这个文件夹我有“SRC”文件夹,2个文件“1.cpp”和“2.cpp”的。每一个.cpp产生一个可执行文件。 CMake的生成Makefile后,我希望能够做到以下几点:

  • 指定我想建立可执行的“1”或“2”或两者
  • 指定我想建立在调试的所有可执行文件模式
  • 指定我希望建立在释放模式的所有可执行文件
  • 指定我想建立在发布和调试模式

,所以我希望能够所有可执行文件中写入以下:

  • (c)作出/任何1
  • (c)作出/什么2
  • (c)作出/任何全释放
  • (c)作出/任何所有调试
  • (c)使任何东西全部调试并发布

实现这一目标的最佳方法是什么? 非常感谢!

+0

指定在cmake文件中或运行make时需要调试/释放模式是非常不寻常的(如果cmake生成了package/tarball /不管怎么说 - 也许不是这样 - 我还没有这么做)。通常,在设置特定版本时指定Release/Debug,通过用'cmake-gui'指定'CMAKE_BUILD_TYPE'来指定。您可以使用if检查构建的类型以包含/排除cmake文件中的项目。我不这样做,但我确实使用'if(CMAKE_HOST_WIN32)'来避免在Linux上构建特定于win32的代码,原理是一样的。 – Steve314 2011-03-05 10:32:57

+0

要一次构建多个配置,我总是使用单独的构建树并使用脚本在每个文件夹中调用make。我不会说这是一个好方法,但它可以完成工作。 – Steve314 2011-03-05 10:35:51

+0

感谢您的回复。我会发布另一个关于一次构建多个配置的问题。 – 2011-03-05 13:36:57

回答

3

您需要知道您的“src”目录的根目录中的顶级CMakeLists.txt(使用add_subdirectory)。然后在“src”中,您将需要另一个指定如何编译可执行文件的CMakeLists.txt。这本身将有可能说,比如:

make 1 2 

至于它可以在cmake的通过变量CMAKE_BUILD_TYPE被指定的调试/释放模式。但我通常,在顶层,指示它的调试或发行模式,如果未指定变量:

IF(NOT CMAKE_BUILD_TYPE) 
    SET(CMAKE_BUILD_TYPE Debug) 
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG") 
ENDIF(NOT CMAKE_BUILD_TYPE) 

编辑生成类型,而无需修改的CMakeLists.txt的另一种方式是做

make edit_cache 

这将带出一个带有变量的ncurses对话框,其中包括CMAKE_BUILD_TYPE