CMake生成项目文件以列出外部源

时间:2015-07-31 16:13:46

标签: visual-studio cmake project-files

请考虑以下结构:

set(_hdr
    inc/proj1.h
    ../common/inc/common1.h
)
set(_src
    src/proj1.cxx
    ../common/src/common1a.cxx
    ../common/src/common1b.cxx
)
source_group("common\\inc" FILES 
              ../common/inc/common1.h 
)
source_group("common\\src" FILES 
              ../common/src/common1a.cxx 
              ../common/src/common1b.cxx
)
source_group("inc" FILES inc/proj1.h)
source_group("src" FILES src/proj1.cxx)

add_executable( project1 ${_src} ${_hdr} )

Project1和Project2是分开的项目。 他们都使用通用代码。 我想(有选择地)将一些常见的源文件列入每个项目的visual studio项目文件中,以便我可以在IDE中编辑它们。 我不想要一个用于公共代码的独立库。

现在我使用相对路径,例如,在project1的cmake文件中:

$q_fn = mysql_query("SELECT deptname FROM functiontb ") ; 
$storeArray = Array();
while ($row = mysql_fetch_array($q_fn, MYSQL_ASSOC)) {
    $storeArray[] =  $row['deptname'];  
}
foreach($storeArray as $sa)
                            { ?>

                                 <tr >

                                <td><?php echo $sa ?></td>

                            <?php   
                                $q_audit=mysql_query("SELECT * FROM scheduletb where department = '$sa' ") );   
                                while($r= mysql_fetch_assoc($q_audit)){


                                        $month=date("F",strtotime($r['tdate']));?>

                                <td <?php 
                                    if($month == 'January'){
                                    ?> bgcolor="#1E90FF">
                                    <?php } ?>
                                </td>

                                <td <?php
                                    if($month == 'February'){
                                    ?> bgcolor="#1E90FF">
                                <?php } 
                                 ?></td>

                                <td <?php 
                                    if($month == 'March'){
                                    ?> bgcolor="#1E90FF">
                                <?php } 
                                 ?></td>

                                <td <?php 
                                    if($month == 'April'){
                                    ?> bgcolor="#1E90FF">
                                <?php } 
                                 ?></td>

                                <td <?php 
                                    if($month == 'May'){
                                    ?> bgcolor="#1E90FF">
                                <?php } 
                                 ?></td>

                                <td <?php 
                                    if($month == 'June'){
                                    ?> bgcolor="#1E90FF">
                                <?php } 
                                 ?></td>

                                <td <?php 
                                    if($month == 'July'){
                                    ?> bgcolor="#1E90FF">
                                <?php } 
                                 ?></td>

                                <td <?php 
                                    if($month == 'August'){
                                    ?> bgcolor="#1E90FF">
                                <?php } 
                                 ?></td>

                                <td <?php 
                                    if($month == 'September'){
                                    ?> bgcolor="#1E90FF">
                                <?php } 
                                 ?></td>

                                <td <?php 
                                    if($month == 'October'){
                                    ?> bgcolor="#1E90FF">
                                <?php } 
                                 ?></td>

                                <td <?php 
                                    if($month == 'November'){
                                    ?> bgcolor="#1E90FF">
                                <?php } 
                                 ?></td>

                                <td <?php 
                                    if($month == 'December'){
                                    ?> bgcolor="#1E90FF">
                                <?php } 
                                 ?> </td>
                                 </tr>

                                    <?php  } 
                                        }   ?>

这不灵活 - 如果我想移动文件夹,必须检查和修改所有CMakeLists.txt。 是否有更优雅的方式来解耦依赖关系,或者什么是处理常见源文件的更好方法?

欢迎任何建议。 非常感谢。

1 个答案:

答案 0 :(得分:0)

You may set variable to the path to 'common' folder, and use it for refer to files in it. So, whenever you need to move 'common' folder around, you need to edit only this variable.

CMakeLists.txt:

set(COMMON_DIR ${CMAKE_CURRENT_SOURCE_DIR}/common)

project1/CMakeLists.txt:

set(_hdr
    inc/proj1.h
    ${COMMON_DIR}/inc/common1.h
)
set(_src
    src/proj1.cxx
    ${COMMON_DIR}/src/common1a.cxx
    ${COMMON_DIR}/src/common1b.cxx
)
...