博客專欄

        EEPW首頁 > 博客 > CMAKE(3)—— aux_source_directory包含目錄下所有文件以及自動構建系統

        CMAKE(3)—— aux_source_directory包含目錄下所有文件以及自動構建系統

        發布人:電子禪石 時間:2022-04-22 來源:工程師 發布文章
        CMAKE(3)—— aux_source_directory包含目錄下所有文件以及自動構建系統



        aux_source_directory 查找在某個路徑下的所有源文件。


        aux_source_directory(< dir > < variable >)

        1

        搜集所有在指定路徑下的源文件的文件名,將輸出結果列表儲存在指定的變量中。該命令主要用在那些使用顯式模板實例化的工程上。模板實例化文件可以存儲在Templates子目錄下,然后可以使用這條命令自動收集起來;這樣可以避免手工羅列所有的實例。


        使用該命令來避免為一個庫或可執行目標寫源文件的清單,是非常具有吸引力的。


        但是如果該命令貌似可以發揮作用,那么CMake就不需要生成一個感知新的源文件何時被加進來的構建系統了(也就是說,新文件的加入,并不會導致CMakeLists.txt過時,從而不能引起CMake重新運行)。


        正常情況下,生成的構建系統能夠感知它何時需要重新運行CMake,因為需要修改CMakeLists.txt來引入一個新的源文件。當源文件僅僅是加到了該路徑下,但是沒有修改這個CMakeLists.txt文件,使用者只能手動重新運行CMake來產生一個包含這個新文件的構建系統。


        FILE (GLOB ALL_SOURCES "*.cpp" "*.c" "./AFolder/*.cpp" )

        FILE (GLOB ALL_INCLUDES "*.hpp" "*.h" "./AFolder/*.hpp"  "./AFolder/*.h" )



        SET (ALL_SRCS 

        ${ALL_SOURCES}

        ${ALL_INCLUDES}

        )

        1

        2

        3

        4

        5

        6

        7

        8

        自動構建系統例子

        https://blog.csdn.net/libaineu2004/article/details/78995740


        ./Demo4

            |

            +--- main.cc

            |  

            +--- config.h.in

            |

            +--- math/

                  |

                  +--- MathFunctions.cc

                  |

                  +--- MathFunctions.h

        1

        2

        3

        4

        5

        6

        7

        8

        9

        10

        11

        config.h.in


        #cmakedefine USE_MYMATH

        1

        這樣 CMake 會自動根據 CMakeLists 配置文件中的設置自動生成 config.h 文件。


        #CMake 最低版本號要求

        cmake_minimum_required (VERSION 2.8)

        #項目信息

        project (Demo4)

        #加入一個配置頭文件,用于處理 CMake 對源碼的設置

        configure_file (

          "${PROJECT_SOURCE_DIR}/config.h.in"

          "${PROJECT_BINARY_DIR}/config.h"

          )

        #是否使用自己的 MathFunctions 庫,和.h中#define的頭文件不一樣

        option (USE_MYMATH 

               "Use provided math implementation" ON)

        #是否加入 MathFunctions 庫

        if (USE_MYMATH)

          include_directories ("${PROJECT_SOURCE_DIR}/math")

          add_subdirectory (math)  

          set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)

        endif (USE_MYMATH)

        #查找當前目錄下的所有源文件將名稱保存到 DIR_SRCS 變量

        aux_source_directory(. DIR_SRCS)

        #指定生成目標

        add_executable(Demo ${DIR_SRCS})

        target_link_libraries (Demo  ${EXTRA_LIBS})

        1

        2

        3

        4

        5

        6

        7

        8

        9

        10

        11

        12

        13

        14

        15

        16

        17

        18

        19

        20

        21

        22

        23

        自動生成的config.h為


        #define USE_MYMATH

        1

        #include 

        #include 

        #include "config.h"

        #ifdef USE_MYMATH

          #include "math/MathFunctions.h"

        #else

          #include 

        #endif

        int main(int argc, char *argv[])

        {

            if (argc < 3){

                printf("Usage: %s base exponent \n", argv[0]);

                return 1;

            }

            double base = atof(argv[1]);

            int exponent = atoi(argv[2]);

            

        #ifdef USE_MYMATH

            printf("Now we use our own Math library. \n");

            double result = power(base, exponent);

        #else

            printf("Now we use the standard library. \n");

            double result = pow(base, exponent);

        #endif

            printf("%g ^ %d is %g\n", base, exponent, result);

            return 0;

        }

        ————————————————


        原文鏈接:https://blog.csdn.net/u012564117/article/details/95085360


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: cmake

        技術專區

        關閉
        主站蜘蛛池模板: 江华| 获嘉县| 柳河县| 沁阳市| 台南市| 江陵县| 南溪县| 梅河口市| 固原市| 育儿| 泸西县| 汉寿县| 大兴区| 大英县| 武强县| 泾川县| 永新县| 铁岭市| 安西县| 宣恩县| 黄龙县| 额尔古纳市| 瓮安县| 红桥区| 莱西市| 玛多县| 潞城市| 中牟县| 四会市| 白玉县| 贡嘎县| 苏州市| 平顶山市| 璧山县| 利川市| 沙田区| 库尔勒市| 疏附县| 酒泉市| 济宁市| 肥东县|