CMake:获取根项目名称

时间:2019-01-01 08:19:13

标签: c cmake project

假设我具有以下C项目结构:

├── CMakeLists.txt
├── include
│   ├── header.h
├── README.md 
├── src
│   └── src.c
└── test
    ├── CMakeLists.txt
    └── test.c

根目录中的CMakeLists.txt包含一个名为cproj的项目

PROJECT(cproj C)

test/CMakeLists.txt中,我还有另一个项目

PROJECT(test C)

问题是如何评估cproj目录中CMakeLists.txt中的项目名称test

2 个答案:

答案 0 :(得分:1)

如果我正确收集了用例,则可能应该执行以下操作:

  1. test很可能不是一个独立的子项目。它不应具有project指令。如果删除它,它将现在位于cproj项目下。

  2. 现在,您要查找在根目录中设置的项目名称,它应该可以通过CMAKE_PROJECT_NAME变量使用。

答案 1 :(得分:0)

我找到了解决方案,我想我会自己回答。

我在根SET_PROPERTY(GLOBAL PROPERTY GLOBAL_NAME "cproj")中添加了GLOBAL_NAME。这样创建了一个名为CMakeLists.txt的全局属性。

test目录的GET_PROPERTY(ROOT_PROJECT_NAME GLOBAL PROPERTY GLOBAL_NAME)中,我使用ROOT_PROJECT_NAME将属性的值存储在名为test/CMakeLists.txt的局部变量中。然后,我可以通过该变量访问值。

编辑:根据@StoryTeller所述,我可以只删除CMAKE_PROJECT_NAME中新项目的声明,而改用const HOOK_NEW_ORDER = 1; const HOOK_ACTION_ORDER_STATUS_POST_UPDATE = 2;