Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I use add_library in 'CMakeLists.txt' to include entire files(.cpp,.h etc) in a directory [duplicate]

In my project I am using cpp and .h files they all are in different folders

|-src
  |-main
   |-java
   |-cpp
    |-native-lib.cpp
    |-library-1
      |-include
        |-lib11.h
        |-lib12.h
        |-... 
    |-library-2
      |-include
        |-lib21.h
        |-lib22.h
        |-... 

in current version i am adding each files into 'CMakeLists.txt'

...

add_library(# Sets the name of the library.
            native-lib

            # Sets the library as a shared library.
            SHARED

            # Provides a relative path to your source file(s).



            src/main/cpp/native-lib.cpp
            src/main/cpp/library-1/include/lib10.h
            src/main/cpp/library-1/include/lib11.h
            src/main/cpp/library-1/include/lib12.h
            src/main/cpp/library-1/include/lib13.h
            ...

            src/main/cpp/library-2/include/lib21.h
            src/main/cpp/library-2/include/lib22.h
            src/main/cpp/library-2/include/lib23.h
            ...

)
...

I tried adding like below

...

add_library(# Sets the name of the library.
            native-lib

            # Sets the library as a shared library.
            SHARED

            # Provides a relative path to your source file(s).



            src/main/cpp/native-lib.cpp
            src/main/cpp/library-1/include/*.h  #expected result: it  will include all '.h' files in directory, but gradle sync failed

            src/main/cpp/library-2/include/*.h#expected result: it  will include all '.h' files in directory, but gradle sync failed


)
...

Any other way to include all files in a folder using add_library

after suggestion from Lucky

# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html

# Sets the minimum version of CMake required to build the native library.

cmake_minimum_required(VERSION 3.4.1)

# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.

  include_directories(src/main/cpp/library-1/include)
  include_directories(src/main/cpp/library-2/include)



file(GLOB SOURCES "src/*.h")
add_library( # Sets the name of the library.
             native-lib


             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).

             src/main/cpp/native-lib.cpp
             ${SOURCES}




             )




# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.

find_library( # Sets the name of the path variable.
              log-lib

              # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )

# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.

target_link_libraries( # Specifies the target library.
                       native-lib

                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )
like image 762
CLIFFORD P Y Avatar asked Oct 24 '17 09:10

CLIFFORD P Y


People also ask

What does Add_library do in CMake?

To add a library in CMake, use the add_library() command and specify which source files should make up the library. Rather than placing all of the source files in one directory, we can organize our project with one or more subdirectories. In this case, we will create a subdirectory specifically for our library.

How does CMakeLists TXT work?

CMakeLists. txt file contains a set of directives and instructions describing the project's source files and targets (executable, library, or both). When you create a new project, CLion generates CMakeLists. txt file automatically and places it in the project root directory.

How do I include a .h file in CMake?

To include headers in CMake targets, use the command target_include_directories(...) . Depending on the purpose of the included directories, you will need to define the scope specifier – either PUBLIC , PRIVATE or INTERFACE .

Where does CMake look for include files?

cmake is searched first in CMAKE_MODULE_PATH , then in the CMake module directory. There is one exception to this: if the file which calls include() is located itself in the CMake builtin module directory, then first the CMake builtin module directory is searched and CMAKE_MODULE_PATH afterwards.


1 Answers

You can generate a list of your source files:

file(GLOB SOURCES "src/*.h")

Now the SOURCES variable can be used as a parameter in add_library.

add_library(native-lib SHARED ${SOURCES})
like image 112
Lucky Avatar answered Oct 17 '22 02:10

Lucky