Hi,

I recently ported a relatively small project
(https://github.com/kpu/kenlm) to CMake. When I use the Unix Makefile
generator, everything works well as expected. Unfortunately, when I
use the XCode generator, I'm having difficulty getting the files
within the XCode project organized in the desired manner.

My goal is to have the layout of files in the XCode project match the
layout of directories and files on disk.

I have so far been unable to figure out how to do so. The directory
structure is described briefly below. I would appreciate any guidance
that anyone might have.

The project has two directories (lm and util), and each of those
directories contains two subdirectories. Each directory and
subdirectory has a CMakeLists.txt file. Each directory contains a
number of source and header files; these files are organized within
the CMakeLists.txt files into object libraries using add_library(foo
OBJECT ...). Some of the directories also contain one or more
*_main.cc files (each of these gets compiled into an executable), and
one or more *_test.cc files (each of these gets compiled into a unit
test executable).

When I use CMake to generate an XCode project, the XCode project
contains a Sources directory. Under Sources, there is one directory
for each executable, one directory for each unit test, and one
directory for each object library. Each of those directories are
further divided into a "Source Files" subdirectory, an "Object Files"
subdirectory, and a CMakeFiles.txt file. Additionally, the Sources
directory also contains three additional subdirectories: ALL_BUILD,
CTestDashboardTarget, and ZERO_CHECK.

kenlm/
  Sources/
    ALL_BUILD/
    CTestDashBoardTarget/
    ZERO_CHECK/
    bit_packing_test/
    file_piece_test/
    ...
    kenlm_util
    ...
    query/
    filter/
      Source Files/
      Object Files/
      CMakeLists.txt
    ...


By using set_target_properties(... PROPERTIES FOLDER ...), I have been
able to group some of the directories (the unit tests and the
executables) together, like so:

kenlm/
  Sources/
    ALL_BUILD/
    CTestDashBoardTarget/
    ZERO_CHECK/
    unit_tests/
      bit_packing_test/
      file_piece_test/
      ...
    kenlm_util
    ...
    executables/
      query/
      filter/
        Source Files/
        Object Files/
        CMakeLists.txt
      ...

By additionally using source_group( ... FILES ...) I have been able to
rename any of the Source Files/ subdirectories. For example, I can go
from this:

kenlm/
    executables/
      filter/
        Source Files/
        Object Files/
        CMakeLists.txt

To this:

kenlm/
    executables/
      filter/
        my_custom_src_name/
        Object Files/
        CMakeLists.txt

I want the XCode project to look more or less just like the actual
directory layout:

kenlm/
  Sources/
    lm/
      *.cc
      *.hh
      builder/
        *.cc
        *.hh
      filter/
        *.cc
        *.hh
    util/
      *.cc
      *.hh
      double_conversion/
        *.cc
        *.hh
      stream/
        *.cc
        *.hh


Based on other threads and bug reports that I've found online, I
suspect that this should be doable using source_group( ... FILES ...)
and/or set_target_properties(... PROPERTIES FOLDER ...), but I so far
haven't been able to figure out how.

Any advice or tips would be greatly appreciated.

Thanks,
Lane
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to