target_include_directories does not work with CUDA

Problem

target_include_directories is an useful CMake directive to specify the include directories for building a particular target, as described here. The FindCUDA module for CMake which handles CUDA compilation seems to completely ignore this directive. The include directories specified for the target are not passed to CUDA compilation by nvcc.

This will most commonly result in errors of the form: someheader.h: No such file or directory.

Solution

This is a well known limitation of the CUDA module of CMake, as documented here. There seems to be no plan currently to support target_include_directories for CUDA compilation.

The only solution is to switch to include_directories to add these directories for all the targets in the CMakeLists.txt file.

Tried with: CMake 2.8.12.2, CUDA 6.5 and Ubuntu 14.04

How to add include directory to Qt project

The method to add an include directory to a Qt project depends on how the project was created.

If the project has a .pro file, then add this line to it:

INCLUDEPATH += "C:\some\include\path"

If you have Qt Creator open with the project, you can find the .pro file under the project name. Alternatively, you can use any editor to edit this file. Remember to run qmake after adding the include directory.

If the project has a .includes file, then just add the path directly to it:

C:\some\include\path

Tried with: Qt 5.2.0 and Windows 7 x64

How to add include directories in CMake

It is common in many setups to have additional include directories that need to be used during compilation of C, C++ or CUDA code. These can be both global or relative local directories. Adding include directories to all targets or specific targets is easy in CMake.

  • The directive to add include directories for all targets being compiled by CMake is include_directories. For example, add this to CMakeLists.txt:
include_directories(
    /usr/local/flac
    include
    src
    )
  • The directive to add include directories for a particular target being compiled by CMake is target_include_directories. For example, add this to CMakeLists.txt to compile the target foobar:
target_include_directories(
    foobar PUBLIC
    /usr/local/flac
    include
    src
    )

Tried with: CMake 2.8.7 and Ubuntu 14.04

How to add include directory in Eclipse CDT

Many C/C++ projects may have to use header files that are not placed in the standard include directories. In some projects, the include files of the project itself are placed in one or more separate directories. For all such cases, you need to indicate Eclipse CDT to add these include directories to the compilation. Else your compilation fails with the error that an included header file cannot be found.

To add an include directory to your project in Eclipse CDT:

  1. Right-click on the project name in Project Explorer, choose Properties > C/C++ Build > Settings

  2. For include directory used by C++ files, choose Cross G++ Compiler > Includes. For C files, choose Cross GCC Compiler > Includes.

  3. In the Include paths section, click the + button and add the include directory. If you want to add multiple include directories, add them separately like this.

Tried with: Eclipse 3.7.2, Eclipse CDT 8.0.2 and Ubuntu 12.04 LTS